关于无序集合:无序集合 – 在python中设置

Unordered collection - sets in python

本问题已经有最佳答案,请猛点这里访问。

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

来自文档:

A set object is an unordered collection of distinct hashable objects.

Being an unordered collection, sets do not record element position or order of insertion.

但是,如果它们没有顺序,为什么我在这个测试中总是得到相同的顺序呢?我在等一些随机的订单。

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


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

数据总是以可预测的顺序排列的原因,因为发生这种情况时,特定的实现选择始终以插入顺序指示数据顺序的方式排列元素。但是,不能保证会发生这种情况,我们确实在python 3.x字典实现中看到了这种偏差。

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

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

我们仍然称之为无序,除非文件严格规定并保证其订单,否则可能会有惊喜等待您。我见过依赖于集合和字典在插入模式中保持有序的事实的实现。当这些实现被移植到python 3.x时,会产生严重的后果。

γ

What’s New In Python 3.3

1
2
Security improvements:
    Hash randomization is switched on by default.