Может ли установленное в Python отсутствие упорядочения считаться случайным порядком? - PullRequest
13 голосов
/ 18 мая 2010

Я хотел бы знать, является ли отсутствие упорядочения элементов встроенной структуры Python set "достаточно случайным". Например, если взять итератор множества, можно ли считать его перемешанным представлением его элементов?

(Если это имеет значение, я запускаю Python 2.6.5 на хосте Windows.)

Ответы [ 5 ]

27 голосов
/ 18 мая 2010

Нет, это не случайно. Он «произвольно упорядочен», что означает, что вы не можете зависеть от того, является ли он упорядоченным или случайным.

4 голосов
/ 18 мая 2010

Произвольность является центральной при разработке программ, каждая из этих свобод, которую вы резервируете , похожа на карту джокера , которую вы можете использовать при реализации, разработке или переписывании своей программы. Чем больше таких бесплатных карт вы соберете, тем больше вы сможете повысить эффективность своего кода (вероятно), поскольку у вас больше свободы для его изменения.

Это не случайно, это только свобода. Если так будет лучше, заказ может быть направлен вперед по средам, а по пятницам - назад.

4 голосов
/ 18 мая 2010

Нет, вы не можете полагаться на это для каких-либо реальных статистических целей. Реализация наборов в Python в терминах хеш-таблицы и может привести к тому, что распределение элементов отобразит некоторые очень неслучайные свойства. Существует большой разрыв между «отсутствием гарантированного заказа» и «гарантированно неупорядоченным равномерно-случайным образом».

Используйте random.shuffle до действительно перемешать элементы последовательности.

3 голосов
/ 18 мая 2010

Одним словом, нет:

>>> list(set(range(10000))) == list(range(10000))
True
0 голосов
/ 25 июля 2017

Просто заметка о строгости заказа. Кажется, что это очень ненадежно даже в той же рабочей среде.

Например, этот код дает разные ответы:

data = 'KSRNDOW3GQ'
chars = set(data)
print(list(chars))

enter image description here

...