import random
random.shuffle(x[, random])
x
- изменяемая последовательность (список),random
- функция, которая выдает случайные числа float
(устарел с версии Python 3.9 и будет удален в версии 3.11).Функция shuffle()
модуля random
перемешивает изменяемую последовательность x
на месте. Функция ничего не возвращает, а изменяет непосредственно сам объект последовательности x
.
>>> import random
>>> lst = list(range(1, 50, 6))
>>> random.shuffle(lst)
>>> lst
# [31, 1, 49, 19, 7, 37, 25, 13, 43]
Функция random.shuffle()
способна работать только с изменяемыми последовательностями, такими как списки, т.е. получить перестановку из строки или кортежа не получится. Для перемешивания неизменяемых последовательностей можно использовать функцию random.sample(x, k=len(x))
как показано ниже в примере.
Необязательный параметр random
принимает имя функции которая выдает случайные числа с плавающей точкой в диапазоне [0.0, 1.0]
, с единственным условием - данная функция не должна принимать параметры. По умолчанию это функция random.random()
:
>>> import random
>>> lst = [1, 2, 3, 4]
>>> random.shuffle(lst, random.random)
>>> lst
# [2, 3, 4, 1]
Внимание! Необязательный аргумент random
устарел с версии Python 3.9 и будет удален в версии 3.11.
Например, получить перестановку элементов списка, другими словами перемешать, можно как-то так:
>>> import random
# получаем список цифр от 0 до 8
>>> x = list(range(0,9))
# список `x` перемешивается "на месте"
# т.е. новый список не возвращается
>>> random.shuffle(x)
# [4, 6, 0, 7, 2, 3, 1, 8, 5]
Что бы перемешать неизменяемую последовательность (строку, кортеж), ее необходимо преобразовать в список:
# преобразуем строку в список букв
>>> x = list('абракадабра')
>>> random.shuffle(x)
# ['а', 'а', 'к', 'б', 'р', 'а', 'р', 'а', 'б', 'а', 'д']
# преобразуем полученный список обратно в строку
>>> ''.join(x)
# 'аакбрарабад'
или воспользоваться функцией random.sample()
.
>>> import random
>>> x = 'абракадабра'
>>> random.sample(x, len(x))
# ['р', 'к', 'а', 'д', 'а', 'б', 'а', 'р', 'а', 'б', 'а']