Selecting a random element or value from a list is a common task - be it for randomized result from a list of recommendations or just a random prompt.
In this article, we'll take a look at how to randomly select elements from a list in Python. We'll cover the retrieval of both singular random elements, as well as retrieving multiple elements - with and without repetition.
Selecting a Random Element From Python List
The most intuitive and natural approach to solve this problem is to generate a random number that acts as an index to access an element from the list.
To implement this approach, let's look at some methods to generate random numbers in Python:
random.randrange(). We can additionally use
random.choice() and supply an iterable - which results in a random element from that iterable being returned back.
random.randint(a, b) returns a random integer between
We'll want random index in the range of
len(list)-1, to get a random index of an element in the list:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] random_index = random.randint(0,len(letters)-1) print(letters[random_index])
Running this code multiple times yields us:
e c f a
random.randrange(a) is another method which returns a random number
n such that
0 <= n < a:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] random_index = random.randrange(len(letters)) print(letters[random_index])
Running this code multiple times will produce something along the lines of:
f d d e
random.randrange(len(letters)) returns a randomly generated number in the range
len(letters) - 1, we use it to access an element at random in
letters, just like we did in the previous approach.
This approach is a tiny bit simpler than the last, simply because we don't specify the starting point, which defaults to
Now, an even better solution than the last would be to use
random.choice() as this is precicely the function designed to solve this problem:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] print(random.choice(letters))
Running this multiple times results in:
b e e f e
Selecting More Than One Random Element From Python List
The first method that we can make use of to select more than one element at random is
random.sample(). It produces a sample, based on how many samples we'd like to observe:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] print(random.sample(letters, 3))
This returns a list:
['d', 'c', 'a']
This method selects elements without replacement, i.e., it selects without duplicates and repetitions.
If we run this:
Since it doesn't return duplicates, it'll just return our entire list in a randomized order:
['a', 'e', 'c', 'd', 'f', 'b']
Similar to the previous function,
random.choices() returns a list of randomly selected elements from a given iterable. Though, it doesn't keep track of the selected elements, so you can get duplicate elements as well:
Free eBook: Git Essentials
Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] print(random.choices(letters, k=3))
This returns something along the lines of:
['e', 'f', 'f']
Also, if we run:
print(random.choices(letters, k = len(letters)))
It can return something like:
['d', 'e', 'b', 'd', 'd', 'd']
random.choices returns a
k-sized list of elements selected at random with replacement.
This method can also be used implement weighted random choices which you can explore further in the official Python documentation.
Selecting Random n Elements with No Repetition
If you're looking to create random collections of n elements, with no repetitions, the task is seemingly more complex than the previous tasks, but in practice - it's pretty simple.
shuffle() the list and partition it into n parts. This ensures that no duplicate elements are added, since you're just slicing the list, and we've shuffled it so the collections are random.
If you'd like to read more about splitting a list into random chunks take a look at - How to Split a List Into Even Chunks in Python.
We'll save the result in a new list, and if there's not enough elements to fit a final collection, it'll simply be unfinished:
import random def select_random_Ns(lst, n): random.shuffle(lst) result =  for i in range(0, len(lst), n): result.append(lst[i:i + n]) return result lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(select_random_Ns(lst, 2))
This results in a list of random pairs, without repetition:
[[8, 6], [3, 4], [5, 7], [9, 1], ]
In this article, we've explored several ways to retrieve one or multiple randomly selected elements from a List in Python.
We've accessed the list in random indices using
randrange(), but also got random elements using