18

我想知道 Python 内置set结构中缺少元素排序是否“足够随机”。例如,取一个集合的迭代器,是否可以将其视为其元素的混洗视图?

(如果重要的话,我在 Windows 主机上运行 Python 2.6.5。)

4

5 回答 5

34

不,这不是随机的。它是“任意排序的”,这意味着您不能依赖它是有序的还是随机的。

于 2010-05-18T19:19:24.987 回答
6

一句话,不:

>>> list(set(range(10000))) == list(range(10000))
True
于 2010-05-18T19:38:11.430 回答
4

在设计程序时,任意性是核心,您保留的这些自由中的每一个都像一张百搭牌,您可以在实施、开发或重写程序时使用它。您收集的这些免费卡片越多,您从代码中提供的效率就越高(可能),因为您有更多的自由来更改它。

这不是随机的,它只是自由。如果这样设置更好,则订单可以在星期三向前,在星期五“向后”。

于 2010-05-18T19:45:10.150 回答
4

不,您不能将其用于任何真正的统计目的。Python 中集合的实现是根据哈希表来实现的,并且会导致元素分布显示一些非常非随机的属性。“没有保证顺序”和“保证以统一随机方式无序”之间存在很大差距。

用于真正random.shuffle打乱序列的元素。

于 2010-05-18T19:21:01.537 回答
4

只是关于订单严格性的说明。即使在相同的运行环境下,似乎也很不可靠。

例如,这段代码给出了不同的答案:

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

在此处输入图像描述

于 2017-07-25T04:31:35.707 回答