无序集合 - 在python

时间:2015-04-28 15:57:04

标签: python python-2.7

很抱歉,如果这是一个基本问题,但我想了解set类型如何在python中运行

来自docs

  

set对象是不同的可哈希对象的无序集合。

     

作为无序集合,集合不记录元素位置或插入顺序。

但如果它们是无序的,为什么我在这个测试中总是获得相同的顺序?我期待一些随机的订单。

users_ids = set([1, 1, 2, 3])
>>> print users_ids
set([1, 2, 3])

1 个答案:

答案 0 :(得分:9)

随机订单不是无序的。无序意味着没有定义数据的排序方式,即插入顺序或数据与数据的排列方式没有任何关联。

数据始终处于可预测顺序的原因是因为特定实现已经选择总是以使得插入顺序指示数据排序的方式排列元素。但是,有no guarantee 会发生,我们确实看到Python 3.X字典实现中存在偏差。

注意即使我们看到数据已排序,

>>> {1,2,3,4,5}
set([1, 2, 3, 4, 5])

我们仍然称之为无序,除非文件严格说明并保证其订单或可能会有惊喜等着您。我已经看到了依赖于基于插入模式维护有序和字典的事实的实现。这些实现在移植到Python 3.X时会产生严重后果。

  

Python 3.3中的新功能

Security improvements:
    Hash randomization is switched on by default.