Shuffle a List, String, Tuple in Python: random.shuffle, sample

Modified: | Tags: Python, List

In Python, you can shuffle (i.e., randomly reorder) sequences using random.shuffle() and random.sample().

While random.shuffle() modifies a list in place, random.sample() returns a new randomized list and also supports immutable types such as strings and tuples.

For information on sorting or reversing a list, refer to the following articles.

Shuffle a List in Place: random.shuffle()

You can shuffle a list in place with random.shuffle().

import random

l = [0, 1, 2, 3, 4]

random.shuffle(l)
print(l)
# [0, 3, 2, 4, 1]

Create a New Shuffled List: random.sample()

random.sample() returns a new list containing randomly selected elements from a list. The original list remains unchanged.

To create a fully shuffled list, pass the total number of elements as the second argument. You can find the total number of elements using len().

import random

l = [0, 1, 2, 3, 4]

l_shuffled = random.sample(l, len(l))
print(l_shuffled)
# [4, 3, 0, 1, 2]

print(l)
# [0, 1, 2, 3, 4]

Shuffle a String and Tuple

Since strings and tuples are immutable, using random.shuffle() on them will result in a TypeError.

import random

s = 'abcde'

# random.shuffle(s)
# TypeError: 'str' object does not support item assignment

t = (0, 1, 2, 3, 4)

# random.shuffle(t)
# TypeError: 'tuple' object does not support item assignment

To shuffle a string or tuple, use random.sample() to generate a list of randomly ordered elements, then convert it back to the original type.

When used on a string, random.sample() returns a list of characters. Use the join() method to convert it back into a string.

s_shuffled = ''.join(random.sample(s, len(s)))
print(s_shuffled)
# aedcb

To convert a list back into a tuple, use tuple().

t_shuffled = tuple(random.sample(t, len(l)))
print(t_shuffled)
# (4, 1, 2, 0, 3)

The above examples demonstrate how to shuffle an individual string or tuple. If you have a list of strings or tuples, you can use random.sample() or random.shuffle() to shuffle the list.

l = ['apple', 'banana', 'cherry', 'date']

l_shuffled = random.sample(l, len(l))
print(l_shuffled)
# ['cherry', 'banana', 'apple', 'date']

random.shuffle(l)
print(l)
# ['date', 'apple', 'cherry', 'banana']

Fix the Random Seed: random.seed()

You can fix the random seed and initialize the random number generator with random.seed().

Setting the same seed ensures that the shuffle produces the same result each time, which is useful for reproducibility.

l = [0, 1, 2, 3, 4]
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]

l = [0, 1, 2, 3, 4]
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]

Related Categories

Related Articles