2

これは、Python セットで気づいた奇妙なことです。セットに順序がないことを読みましたが、0 から 79 まで、その後 79 から 127 まで下位の要素をポップします。下位の要素はもうポップしません。128 が入ってから 79 がポップされます。なぜこのようになっているのですか?

Python で順序付けられたデータ構造を使用できる代替手段はありますか? 79 から 127 までではなく、0 から 79 までが最も低いのはなぜですか?

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

なぜそれは79から128ではなく0から79まで最低をポップするのですか?
いいえ、順序はランダムではありませんが、完全に任意です。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 に答える