Обратите внимание, что shuffle работает на месте и возвращает None.
В более общем плане в Python изменяемые объекты могут передаваться в функции, и когда функция изменяет эти объекты, стандартом является возврат None (а не, скажем, измененного объекта).
Ответ 2
Как вы узнали, проблема заключалась в перетасовке на месте. У меня тоже часто возникают проблемы, и, похоже, я часто забываю, как скопировать список. Решение заключается в использовании sample(a, len(a)), используя len(a) в качестве размера выборки. Документацию по Python смотрите https://docs.python.org/3.6/library/random.html#random.sample.
Вот простая версия, использующая random.sample(), которая возвращает перетасованный результат в виде нового списка.
import random
a = range(5) b = random.sample(a, len(a)) print a, b, "two list same:", a == b # print: [0, 1, 2, 3, 4] [2, 1, 3, 4, 0] two list same: False
# The function sample allows no duplicates. # Result can be smaller but not larger than the input. a = range(555) b = random.sample(a, len(a)) print"no duplicates:", a == list(set(b))
try: random.sample(a, len(a) + 1) except ValueError as e: print"Nope!", e
# print: no duplicates: True # print: Nope! sample larger than population
Ответ 3
В документации для random.shuffle указано, что это будет
Перетасуйте последовательность xна месте.
Не делайте:
print(random.shuffle(xs)) # WRONG!
Вместо этого выполните:
random.shuffle(xs) print(xs)
Ответ 4
#!/usr/bin/python3
import random
s=list(range(5)) random.shuffle(s) # << shuffle before print or assignment print(s)