Что такое функция shuffle в Python?
Ответы
Дмитрий Ибрагимов
18 января 2023
Функция shuffle()
модуля random перемешивает элементы изменяемой последовательности (список) на месте в случайном порядке.
import random
random.shuffle(x) # где x - изменяемая последовательность (список)
Функция ничего не возвращает, а изменяет непосредственно сам объект последовательности.
import random
a = [1, 2, 3, 4, 5, 6]
b = random.shuffle(a)
print(a)
# => [5, 3, 2, 1, 6, 4]
print(b)
# => None
Функция shuffle()
способна работать только с изменяемыми последовательностями, такими как списки, поэтому применить ее к неизменяемым последовательностям, таким как строка или кортеж не получится. Для перемешивания неизменяемых последовательностей можно преобразовать неизменяемую последовательность к изменяемой:
import random
a = (1, 2, 3, 4, 5, 6)
random.shuffle(a) # Так как кортеж неизменяемый объект, то вернется ошибка
TypeError: 'tuple' object does not support item assignment
# Преобразуем кортеж в список
b = list(a)
random.shuffle(b)
print(b)
# => [1, 5, 3, 4, 2, 6]
Так же можно использовать функцию random.sample()
.
import random
random.sample(x, k, *, counts=None)
# x - последовательность или множество
# k - количество выбираемых элементов
# counts - список элементов для повтора (для Python версии 3.9 и выше)
Количество возвращаемых элементов в выборке не должно превышать размер самой выборки, т.е. k <= len(x)
, в противном случае будет ошибка ValueError
.
import random
a = 'QWERTYUIOP'
b = random.sample(a, 10) # В отличие от shuffle - метод возвращает новую последовательность.
print(b)
# => ['U', 'P', 'Q', 'E', 'T', 'R', 'Y', 'W', 'O', 'I']
b = random.sample(a, 11)
ValueError: Sample larger than population or is negative
a = random.sample(['A', 'B', 'C'], counts=[1, 2, 3], k=6)
print(a)
# 'A', 'B', 'C' повторяется в соответствии со значениями в counts
# => ['A', 'C', 'C', 'B', 'C', 'B']
1
0