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.
号