Что такое функция 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
Познакомьтесь с основами Python бесплатно