Python中集的迭代顺序

Bjö*_*lex 17 python iteration set

如果我有两个相同的集合,意思是a == b给我True,他们会有相同的迭代顺序吗?我试了一下,它有效:

>>> foo = set("abc")
>>> bar = set("abc")
>>> zip(foo, bar)
[('a', 'a'), ('c', 'c'), ('b', 'b')]
Run Code Online (Sandbox Code Playgroud)

我的问题是,我很幸运,还是保证这种行为?

Jas*_*rff 21

这是不是只是他们师出同一个巧合:实现恰好是确定性的,因此创建同一组两次产生相同的排序.但Python并不能保证这一点.

如果以两种不同的方式创建相同的集合:

n = set("abc")
print n

m = set("kabc")
m.remove("k")
print m
Run Code Online (Sandbox Code Playgroud)

...你可以得到不同的订购:

set(['a', 'c', 'b'])
set(['a', 'b', 'c'])
Run Code Online (Sandbox Code Playgroud)

  • @Elenaher其实你甚至不能依赖它.尝试`set('ai')`和`set('ia')`.它们为我制作了不同的订单.(我认为这是因为'a'和'i'具有相同的哈希码模8,再加上另外两个小巧巧合.) (3认同)