Форум сайта python.su
Я использую для перемешивания списка такой метод:
random.shuffle(myList)
Офлайн
Иначе говоря, не будет ли здесь некоторых комбинаций следования элементов, которые не могут выпасть никогда в принципе?нет не будут. Каждая комбинация имеет вероятность быть. (поправьте, если ошибаюсь, но вероятность любой комбинации 48! при 48 элементах)
Офлайн
А сказано где-то прямо в доке, что random.shuffle до конца пережёвывает факториал 48? Ведь у этого метода должен быть какой-то теоретический предел, за которым уже не все комбинации будут выпадать?
Офлайн
The gray CardinalВообще шафл устроен примерно так (где-то читал):
А сказано где-то прямо в доке, что random.shuffle до конца пережёвывает факториал 48? Ведь у этого метода должен быть какой-то теоретический предел, за которым уже не все комбинации будут выпадать?
Отредактировано (Дек. 31, 2008 14:56:25)
Офлайн
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(), считаешь, не надёжно?
Вот вариант…
Офлайн
Надежно. Так же надежно, как и randint. С теми же ограничениями.
Для темы топика - более чем подойдет.
P.S. Опять непонимание матчасти в разделе комбинаторика-теории вероятностей-мат статистика
Офлайн