random.shuffle(myList)
random.shuffle(myList)
Иначе говоря, не будет ли здесь некоторых комбинаций следования элементов, которые не могут выпасть никогда в принципе?нет не будут. Каждая комбинация имеет вероятность быть. (поправьте, если ошибаюсь, но вероятность любой комбинации 48! при 48 элементах)
The gray CardinalВообще шафл устроен примерно так (где-то читал):
А сказано где-то прямо в доке, что random.shuffle до конца пережёвывает факториал 48? Ведь у этого метода должен быть какой-то теоретический предел, за которым уже не все комбинации будут выпадать?
iceА так ли это? В доке от Active State читаю:
поэтому будь у тебя хоть гугол элементов в листе, любой варинат возможен…
Note that for even rather small len(x), the total number of permutations of x is larger than the period of most random number generators; this implies that most permutations of a long sequence can never be generated.
Отметьте, что даже для довольно маленького len(x), общее количество перестановок x больше, чем период большинства генераторов случайных чисел; это подразумевает, что большинство перестановок длинной последовательности никогда не сможет сгенерироваться.
The gray CardinalПо мойму это говорит о том, что если генератор не сможет сгенерить достаточно большое число len(x) > maxrand то какие-то числа из исходной последовательности могут не перемешаться.
это подразумевает, что большинство перестановок длинной последовательности никогда не сможет сгенерироваться.
import random
def shuffle(a):
out = []
while len(a) > 0:
i = random.choice(a)
a.remove(i)
out.append(i)
return out
print shuffle([x for x in xrange(100)])
iceВ доке от Active State про ограничения для choice ничего не сказано, вроде.
какие ограничения у choice?
# -*- coding: utf-8 -*-
import random
def shuffle(l):
for i in xrange(len(l)):
l.insert(random.randint(0, len(l)), l.pop(i))
l = range(100)
shuffle(l)
print l
ZZZСпасибо, понятно. Так ты не рекомендуешь использовать random.shuffle(), считаешь, не надёжно?
Вот вариант…