Python random choice function to select a random item from a list and Set

By | November 16, 2021
Python random choice function

We can use the random.choice()  function if we want to select a random item from a list, tuple, or string. This function accepts a sequential object like list, string, and tuple as an argument and returns a random item or element from them.

In this Python tutorial, you will learn how to use this random.choice() function and find the random element from a sequential object like list, and tuple.

Vamware

What is the Python random.choice function?

random is an inbuilt Python module used to generate random numbers and play with random data.

The random module has many methods and choice() is one of those. We can pick a random item from a non-empty sequence object such as list, tuple,  and string with the method.

syntax of random.choice() function

random.choice(seq)

The choice function accepts only one argument seq (a sequential Python object). The seq object can be a list, tuple, or string.

 return value of random.choice function 

It returns a single random value from the sequential object. If the sequential object is an empty list, tuple, or string, it returns “IndexError: list index out of range
.

Examples 

let’s see some examples of random.choice() function.

Example 1

pick a random item from a list

import random

discount_offer = ['10% off', '12% off', '14% off', '15% off']

random_pick = random.choice(discount_offer)

print(f'Congratulation you won {random_pick} on your first shopping')

Output

Congratulation you won 10% off on your first shopping

Example 2

Let’s see another example, and create a rolling dice using random.choice() function

import random

dice = [1, 2, 3, 4, 5, 6]

roll_dice = random.choice(dice)

print(f'You Got: {roll_dice}')

Output

You Got: 5

How to Select a random item from the list in Python?

Suppose you have a list of random numbers and you wish to select a random number how would you do that?

In the above examples, we have already used the choice function to pick a random item from a list. Let’s see another example of selecting a random element value from a list.

Let’s say you have a list of top marvel movies and you could not select which one to watch today, let’s write a python script that helps you to pick a random one.

import random

marvel_movies = ['Black Panther','Avengers: Endgame', 'Iron Man', 'Thor: Ragnarok', 'Spider-Man: Homecoming']

#select a random movie
to_watch = random.choice(marvel_movies)

print("Movie to watch today is: ", to_watch)

Output

Movie to watch today is: Avengers: Endgame

How to select multiple random choices from a list?

With the choice() function we can only select one item from the list or any other sequential object. If we want to select multiple random items from a list, we have to run the choice function inside a loop.

Example (Select 3 random values from the list)

import random

dice  =list(range(1,7))  #create a list from 0 to 1

print("Diced rolled three times")
#roll dice 3 times
for i in range(3):
    dice_rolled = random.choice(dice)
    print(dice_rolled)

Output

Diced rolled three times
2
6
2

Using a for loop with the random.choice() function will do the trick when we want to find multiple random items from a list. But there is another approach to perform a similar task, i.e. random.choices() function.

random.choices function

With the random.choices function we can pick k number of random items from a list.

This function is similar to the choice() function with some extra argument values.

syntax of random.choices() function 

random.choices(population, weights=None, *, cum_weights=None, k=1)

The random.choices() method can accept 4 argument values

  1. population: it is a sequential value and could be a list, tuple or string.
  2. weights: it is a list of integer values, defining the probability weightage of selecting the items. By default its value is None means all the items of the population have an equal probability of random selection.
  3.  cum_weights: It is also a list of integer values, defining the weightage of selecting items. But it define the possibility in accumulation. For example the weights [2,1,1] is similar to the cum_weights [2,3,4]
  4. k: It represents an integer number, that defines the k number of random items to select from the list or any other sequential object. It is also an optional argument value by default its value is 1, which means if it is not specified the function will return a list of a single item.

return value of random.choices function 

The function returns a list with k number of random items from the population object.

It also returns an IndexError if the population object is an empty list, tuple, or string.

Example

Suppose you own an e-commerce website and you want to give a gift coupon or a discount offer to k number of users. The discount offer varies from 10 to 60%, and you wish to randomly select the discount offer for these k users. And you also wish to set the probability of selecting the discount offer, which means you do not want that all of them get 60% off the discount offer.

import random

discount_offer = ['10% off','20% off', '30% off', '40% off','50% off', '60% off']

#the selection probability of 10%off is 10 times higher 50 and 60
#the selection probability of 20%off is 8 times higher 50 and 60 
#the selection probability of 30%off is 7 times higher 50 and 60 
#the selection probability of 40%off is 6 times higher 50 and 60
#the selection probability of 50% off and 60% off is same
selection_weight = [10, 8, 7, 6, 1, 1]

#10 users 
users = 10

print(random.choices(discount_offer, weights= selection_weight, k=users))

Output

['30% off', '20% off', '10% off', '20% off', '40% off', '30% off', '20% off', '40% off', '20% off', '10% off']

How to select random multiple choices without any repetition?

Both random.choice() and random.choices() functions can be used in selecting multiple random items, but both of them can pick repetitive elements. If we want to pick multiple items without repetition we have to use the random.sample() function.

Syntax

random.sample(population, k, counts=None)

The sample function is similar to the choices function but here the value of k must be equal or less than the size of the population object, otherwise, we receive the “ValueError: Sample larger than population or is negative”.

Example

import random

marvel_movies = ['Black Panther','Avengers: Endgame', 'Iron Man', 'Thor: Ragnarok', 'Spider-Man: Homecoming']

#select 3 random movies
to_watch = random.sample(marvel_movies, k=3)
print("Movies to watch today are: ", to_watch)

Output

Movies to watch today are: ['Black Panther', 'Spider-Man: Homecoming', 'Thor: Ragnarok']

How to choose a random item from a Python set?

The random.choice function can only work on sequential data objects such as list, tuple, and string. If we try to pick a random item from a list using the choice or choices functions, we will encounter the error TypeError: 'set' object is not subscriptable.

If we want to select a random item from a set object we first need to convert that object into a tuple or list, using the tuple() and list() functions.

Example

import random

#set of movies
movies = ['Black Panther','Avengers: Endgame', 'Iron Man', 'Thor: Ragnarok', 'Spider-Man: Homecoming']

#select a random movie
to_watch = random.choice(list(movies))

print("Movie to watch today is: ", to_watch)

Output

Movie to watch today is: Avengers: Endgame

How to random choice a number between a range of integers

With the Python range() function we can create a sequence of integer numbers, and to select a random number from it we can either use the choice or choices function.

Example

Let’s write a script that can randomly create a 4 digit OTP.

import random

otp_range = range(1000,10000)

#pick a random 4 digit otp
otp = random.choice(otp_range)

print("Your 4 digit OTP is:", otp)

Output

Your 4 digit OTP is: 2393

How to select a random boolean value using random.choice() function?

There are only two boolean values in Python True and False. We can put these two values inside a list or tuple and randomly select any one of them using the choice function.

Example

import random

#boolean vlues
booleans = (True, False)

#select a random boolean value
print(random.choice(booleans))

Output

False

How to choose a random item from a tuple using random.choice() function?

Similar to the Python list, we can use a tuple object as an argument to the choice() function, and the function will return a random item from the tuple.

If the tuple is empty the function will raise the IndexError.

Example

import random

#a tuple of balls
balls = ("Red Ball", "Blue Ball", "Green Ball", "Yellow Ball")

#select a random colour ball from balls 
print(random.choice(balls))

Output

Yellow Ball

For selecting multiple random values from a tuple we can use the random module choices function.

import random

#a tuple of beg
beg = ("Red Ball", "Blue Ball", "Green Ball", "Yellow Ball")

#select random colour balls from beg 
print(random.choices(beg, k=5))

Output

['Green Ball', 'Yellow Ball', 'Green Ball', 'Blue Ball', 'Blue Ball']

How to select random key-value pairs from a dictionary?

The choice and choices functions will only select a random value from the dictionary if all the dictionary keys form a similar structure to the index numbers. This means the dictionary key must start from 0 upt0 n-1, as shown in the example below.

Example

import random

#dictionary
my_dict = {
    0: 50,
    1: 68,
    2: 70,
    3: 40
}

#select random value from dictionary
print(random.choice(my_dict))

Output

40

If the keys of the dictionary are not structured as index numbers or have a different data type, the choice and choices functions will return KeyError.

In that case, we need to convert the dictionary into a list or tuple using the list() or tuple() function.

Example select a random pair from a dictionary

import random

#dictionary
balls = {
    'red': 50,
    'green': 68,
    'blue': 70,
    'yellow': 40
}

#select random key from dictionary
key = random.choice(list(balls))

print(f"The random value is {key}:{balls[key]}" )

Output

The random value is green:68

How to randomly select an item from a list with its index number?

The random module provides a randrange(k) function which return a random integer number between 0 to k-1 . We can use this function to get a random index number and using that index number we can get the item from the list. With this trick, we will have the item as well as the item’s index number.

Example

import random

continents = ['Asia', 'Africa', 'North America', 'South America', 'Antartica', 'Europe', 'Oceania']

#get a random index number of continents
index = random.randrange(len(continents))

#print the random index number value and its item
print('Index:', index, 'Item:', continents[index])

Output

Index: 0 Item: Asia

How to select a random value from multiple lists?

Suppose we have two lists old_users and new_users, and we want to select a random name from these two lists. In such cases, we first need to add both the list making it a single list, and select a random item using the choice function.

Example

import random

old_names = ['Rahul', 'Raj', 'Ravi']
new_names = ['Rohan', 'Rajesh', 'Rakesh']

#add both the lists
names = old_names + new_names

#select a random name
print(random.choice(names))

Output

Rohan

How to select a random item from a multi-D array?

With the help of numpy.random.choice(a, size=k, replace=False) method, we can generate a list of k random index numbers. And the index number will be range from 0 to a, and a is the total number of rows present in the array.

Example

import numpy as np

#it will retrun a random ndarray of integer numbers with 2 items
#which range will vary from 0 to 9 (10 excluded)
print(np.random.choice(10, size=2))

Output

[5 3]

Now we can use the same logic to find the random row and column value for a multi-dimensional array and access a random item.

Example

import numpy as np

#create a numpy array
array = np.array([[ 0, 1,  2],
                  [ 3,  4,  5],
                  [ 6,  7,  8]])

print("The Array is")
print(array)

#number of rows
number_of_rows = array.shape[0]

#select the random row and column
random_row,random_column = np.random.choice(number_of_rows,size=2, replace=False)

print("The random row is: ", end=" ")
print(array[random_row])

print("The random item is", end=" ")
print(array[random_row][random_column])

Output

The Array is
[[0 1 2]
 [3 4 5]
 [6 7 8]]
The random row is:  [6 7 8]
The random item is 6

Conclusion

As the name suggests the random module is used to play with random data in Python. This method is generally used to create random numbers, shuffle list items and pick a random item from sequential data objects. In this tutorial, we learned how to use the Python random.choice() function to select the random items from different data object such as list, tuple, dictionary, and set. The choice function only returns a single random value from the sequential order, to select multiple random values, the random module also provides the choices() function.

Quick Summary of random.choice

Function Description
random.choice(sequence) Return a random item from the sequence object.
random.choices(sequence, k=4) Return 4 random items from the sequence object.
random.choice(range(100,999)) Return a random integer number between 100 and 999.
np.random.choice(3, size=2) return numpy array containing 2 integer number, range 0 to 3.

FAQ (Python random.choice interview questions)

1. What does random.choice() function return?

Ans: It returns a random item from the sequential argument passed to it.

2. What does random.choices() function return?

Ans: It returns a list of random items from the sequential argument specified to it. The number of random items depends on the k argument which default value is 1.

3. Write a python script that randomly chooses the same item from the list every time the random.choice method is called.

import random
items  = ['pen', 'paper', 'pencil', 'book']

for i in range(10):
    #seed the random number generator
    random.seed(3)

    #pick the random number using choice function
    print(random.choice(items))

the seed() function in the above example will save the random function state, which means it will pick the same random item again and again.

4. What will happen if we pass an empty sequential object to the choice and choices functions.

Ans. If the sequence is an empty string, list, or tuple the choice and choices functions will return the IndexError.

People are also reading:

Leave a Reply

Your email address will not be published. Required fields are marked *