In this article, I will let you know how to select a random item from a list and other sequence types in Python. Python **random module has inbuilt function choice() to randomly select an item from a list** and other sequence types.

- The article is part of a series
**Generate Random Data In Python.** - Also, solve our
**Python random data generation Exercise**and**Python Random data generation Quiz**to master random data generation techniques.

**Goals of this lesson. **In this lesson, you’ll learn how to:

- Randomly select an item from a list, Set, and Dictionary
- Randomly select multiple choices
- Choose the same element from the list every time
- Choose a random element from a multidimensional array

## Python random.choice() function

Python random module‘s `random.choice()`

function returns a random element from the non-empty sequence. we can use the choice() function for selecting a random password from word-list, Selecting a random item from the available data.

**Syntax of random.choice()**

random.choice(sequence)

Here **sequence can be a list, string, tuple.**

**Return Value**: -This function **returns a single item from the sequence**. If we pass an empty list or sequence to `random.choice ()`

function it will **raise IndexError: **Cannot choose from an empty sequence.

### random.choice() Examples

Let see how to use random.choice() with the example program.

import random list = [111,222,333,444,555] print("random.choice() to select random item from list - ", random.choice(list)) print("\nrandom.choice() to select random item from list - ", random.choice(list))

Output: Execute Online

random.choice() to select random item from list - 222 random.choice() to select random item from list - 444

**Now let see various use cases of random.choice()**

## Use a Choice function to Randomly select an item from a list

Let assume you have the following movies list and you want to pick one movie from it randomly.

movie_list = ['The Godfather', 'The Wizard of Oz', 'Citizen Kane', 'The Shawshank Redemption', 'Pulp Fiction']

In this example, we are using a random.choice() to select an item from the above list randomly.

import random movie_list = ['The Godfather', 'The Wizard of Oz', 'Citizen Kane', 'The Shawshank Redemption', 'Pulp Fiction'] moview_item = random.choice(movie_list) print ("Randomly selected item from list is - ", moview_item) moview_item = random.choice(movie_list) print ("\n Randomly selected item from list is - ", moview_item)

Output: Execute Online

Randomly selected item from a list using random.choice is - The Shawshank Redemption Randomly selected item from a list using random.choice is - The Godfather

As you can see we executed choice function two times and every time we got a different item from a list.

Note: The **output generated by random.choice() function is not cryptographically secure.** To cryptographically secure random choice we need to use

`random.SystemRandom`

class. Refer to How to secure random data in python for more detail.Now, Let see how to cryptographically secure result of a choice function with an example.

import random movie_list = ['The Godfather', 'The Wizard of Oz', 'Citizen Kane', 'The Shawshank Redemption', 'Pulp Fiction'] secure_random = random.SystemRandom() item = secure_random.choice(movie_list) print ("cryptographically secure random choice - ", item)

Output: Execute Online

cryptographically secure random choice - The Godfather

There are also other ways to randomly select an item from a list lets see those now.

### Randomly select multiple choices

As you know, the `random.choice ()`

function only returns a single item from a list. If you want to randomly select more than one item from a list or set, I’d recommend using a random.choices() or random.sample () instead.

**Example**:

import random #sampling with replacement list = [20, 30, 40, 50 ,60, 70, 80] sampling = random.choices(list, k=4) print("sampling with choices() ", sampling)

Output:

sampling with choices function [80, 50, 40, 60, 40]

- Use the
**random.sample**function when you want to choose multiple random items from a list without including the duplicates. - Use
**random.choices**function when you want to choose multiple items out of a list including repeated.

## The random choice from Set in Python

If we pass Set object directly to the choice function we will get the TypeError: ‘set’ object does not support indexing.

**Using the random.choice function we can’t choose random item directly from a set, without having to copy it into a tuple**. Let see how to use a choice function to select a random item from Set.

import random weight_set = {20, 35, 45, 65, 82} weight = random.choice(tuple(weight_set)) print ("Randomly item from Set is - ", weight)

Output: Execute Online

Randomly item from Set is - 65

## The random choice from Dictionary

Let see how to use the `random.choice`

function to select random key and value pair from the dictionary. The random module’s choice function doesn’t accept a dictionary, you need to convert it into a list before passing. Let see the example now.

import random weight_dict = { "Kelly": 50, "Red": 68, "Jhon": 70, "Emma" :40 } key = random.choice(list(weight_dict)) print ("Random key value pair from dictonary is ", key, " - ", weight_dict[key])

Output: **Execute Online**

Random key value pair from dictonary is Jhon - 70

## Randomly choose an item from a list along with its index position

Many times we need an index position of an item along with its value. You can accomplish this using a random.randrange() function. So let see how to randomly choose an item from a list along with its index position.

**Example**: –

from random import randrange movie_list = ['The Godfather', 'The Wizard of Oz', 'Citizen Kane', 'The Shawshank Redemption', 'Pulp Fiction'] random_index = randrange(len(movie_list)) item = movie_list[random_index] print ("Randomly selected item and its index is - ", item, "Index - ", random_index)

Output: Execute Online

Randomly selected item from list using randrange- The Wizard of Oz Inex - 1

## Choose the same element from list every time

Choosing the same element out of a list is possible. We need to use **random.seed()** and `random.choice`

function together to produces the same element every time. Let see this with an example.

import random float_list = [22.5, 45.5, 88.5, 92.5, 55.4] random.seed(4) random_item = random.choice(float_list) print("random item", random_item) random.seed(4) random_item = random.choice(float_list) print("random item", random_item)

Output: Execute Online

random item 45.5 random item 45.5

To choose the same element every time, you need to find seed root to a number. Refer to this article to find the seed root of a number.

## Choose a random element from a multidimensional array in Python

Most of the time we work with 2-d or 3-d arrays in Python. Let assume you want to pick a random element from it then how to do it? Let see this with an example. In this example, We used `numpy.random.choice()`

function to pick a random element from the multidimensional array.

import numpy array = numpy.array([[11 ,22, 33], [44, 55, 66], [77, 88, 99]]) print("Printing 2D Array") print(array) print("Choose random row from 2D array") randomRow = numpy.random.randint(3, size=1) print(array[randomRow,:])

Output:

Printing 2D Array [[11 22 33] [44 55 66] [77 88 99]] Choose random row from 2D array [[44 55 66]]

**Note**: The **output generated by random.choice() function is not cryptographically secure**. To cryptographically secure random choice we need to use

**random.SystemRandom**class. Refer to

**How to Cryptographically secure random data in python.**

## Next Steps

To practice what you learned in this article, I have created a Python random data generation Quiz and Exercise project.

- Solve our
**Python Random data generation Quiz**to test your random data generation concepts. - Solve the
**Free Random data generation Exercise**to practice and master the random data generation techniques in Python.

Let me know your comments and feedback in the section below.

Arne Vogel

random.choice() should never be used to generate passwords. To quote from the documentation of the random module:

“Warning The pseudo-random generators of this module should not be used for security purposes.”

Instead, secrets.choice() should be used, which is compatible with random.choice(). (The secrets module does not implement a sample() function.)

See also:

https://docs.python.org/3.7/library/random.html

https://docs.python.org/3.7/library/secrets.html

Vishal

Hi Arne, You are right.

I already mentioned in the article The output generated by random.choice() function is not cryptographically secure. To cryptographically secure random choice we need to use random.SystemRandom class and secrets module. Refer the following articles to secure random data in python for more detail.

https://pynative.com/cryptographically-secure-random-data-in-python/

https://pynative.com/python-secrets-module/

Mark

I am trying to create a program which gives you a random string from a list multiple times. The problem is that the string repeat each other. How could I prevent this?

Vishal

You can use the random.sampling method which selects multiple items without repetition. or if you want one item at a time you can use random.choice() and then you can keep the previous string in a list and compare newly picked random string with this ist if it is present execute choice method again till you get the non-repetitive string.