Python的缺乏排序可以被认为是随机顺序吗?

Chu*_*uim 13 python random shuffle set

我想知道Python内置set结构的元素排序是否"足够随机".例如,取一个集合的迭代器,它可以被视为其元素的混乱视图吗?

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

Ign*_*ams 27

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

  • 实际上,顺序可以从集合中各种对象的ID中预测.它由代码严格定义.但是 - 奖金 - 细节不属于您的业务,使其"任意"和"特定于实施","对任何事情都不可靠".并且"只要你被允许照顾就不确定." (7认同)
  • 理解"未定义"和"随机"之间的区别非常重要. (4认同)
  • 它可能只在Python的单个实现下可重复.如果规范说它未定义,则不要假设其他任何内容(甚至不是重复性). (2认同)

Dan*_*ach 6

一句话,不:

>>> list(set(range(10000))) == list(range(10000))
True
Run Code Online (Sandbox Code Playgroud)


xsl*_*ass 6

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

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

data = 'KSRNDOW3GQ'
chars = set(data)
print(list(chars))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Eli*_*sky 5

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

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