2010-05-18 27 views

回答

25

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

+3

理解“不确定”和“随机”之间的区别是很重要的。 – 2010-05-18 19:22:58

+7

事实上,订单可以根据集合中各种对象的ID进行预测。这是代码严格定义的。但是 - 奖金 - 这些细节与您无关,使它们成为“任意”,“特定实施”和“任何事情都不可靠”。而且“只要你被允许照顾,就没有定义。” – 2010-05-18 19:25:58

+0

好的。散列函数将决定顺序。例如,对于整数元素,我们将获得自然顺序。所以,我得出结论,我们将对同一组元素有“未定义”,“任意”和“可重复”排序。 – Chuim 2010-05-18 20:01:07

4

不,你不能依靠它来达到任何真正的统计目的。 Python中的集合的实现是根据哈希表,并可能导致元素分布显示一些非随机的属性。 “没有保证订单”和“保证以统一随机方式无序”之间存在巨大差距。

使用random.shuffle确实序列的混洗元素。

+0

事情是'random.shuffle'只能用于序列,'set'不能。有人可能会把它转换为一个'list',但是对于大量的元素和性能敏感的代码,它可能是一个问题... – Chuim 2010-05-18 20:04:22

3

一句话,没有:制定方案,这些自由,你预留就像是一个百搭卡,你可以用,当你实现,开发或改写的时候

>>> list(set(range(10000))) == list(range(10000)) 
True 
+0

同意,只是做了类似的测试我自己并得到了这些结果。 – Chuim 2010-05-18 19:56:30

4

随意性中心你的程序。您收集的这些免费卡越多,您可以从代码中提供更高的效率(可能),因为您可以更自由地进行更改。

它不是随机的,它只是自由。如果这样更好的话,订单可以在星期三转发,星期五转发。

+0

顶部“禅”答案! ;) – Chuim 2010-05-18 20:05:47

0

只是关于订单严格的说明。看起来即使在相同的运行环境下它也是非常不可靠的。

例如该代码给出了不同的答案:

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

enter image description here