2

这是我在 Python 集中注意到的奇怪之处。我读到集合中没有顺序,但它确实从 0 到 79 以及后来从 79 到 127 弹出较低的元素。它不再弹出较低的元素。只有在 128 进入 79 之后才会弹出。为什么会这样?

有没有其他方法可以在 Python 中使用有序数据结构?为什么它是从 0 到 79 而不是从 79 到 127 的最低值?

>>s = set()
>>s.add(72)
>> s.add(74)
>> s.add(76)
>> s.pop()
72
>> s.add(79)
>> s.pop()
74
>> s.add(81)
>> s
set([81, 76, 79])
>> s.pop()
76
>> s.add(83)
>> s
set([81, 83, 79])
>> s.add(85)
>> s
set([81, 83, 85, 79])
>> s.pop()
81
>> s
set([83, 85, 79])
4

2 回答 2

3

根据字典中元素的插入和删除,存在“一致的”内部排序。请参阅:http ://docs.python.org/library/stdtypes.html#dict.items

据我所知,集合使用相同的散列实现,并且很可能具有相同的排序效果。

于 2012-08-17T12:58:43.597 回答
1

为什么它从 0 到 79 而不是从 79 到 128 弹出最低?
不,排序不是随机的,而是完全任意的。python 集中没有特定的顺序。考虑一下:

>>> s.add(14)
>>> s.add(11)
>>> s.add(3)
>>> s.add(13)
>>> s.add(2)

>>> s.pop()
13
>>> s.pop()
14
>>> s.pop()
2
>>> s.pop()
3
>>> s.pop()
11

这不符合您的结论。(这次发生在 14 )

于 2012-08-17T13:15:40.747 回答