【发布时间】:2022-01-21 17:07:25
【问题描述】:
让我们运行以下代码:
st = {3, 1, 2}
st
>>> {1, 2, 3}
st.pop()
>>> 1
st.pop()
>>> 2
st.pop()
>>> 3
虽然说集合是无序的,但这个集合的行为就好像它是按升序排序的。根据文档,应该返回“任意元素”的方法pop() 也以升序返回元素。这是什么原因?
【问题讨论】:
-
afaik 它是完全随机的,并且根据对象的哈希值
-
"unordered" 意味着它不能被依赖来被订购,而不是可以被依赖来not被订购。 “任意元素”的想法相同。
-
.pop 按照元素在集合中的存在顺序移除元素。 set.pop 的文档说“任意”,因为集合的基本顺序是未定义的。这是因为集合的数学(和 Python)定义只关心集合中的成员,而不关心集合中的顺序。集合内的排序基于哈希码,这是不可预测的。
-
集合中的物品必须按一些的顺序进行存放(并取出),只是您不能依赖顺序。
-
见second linked duplicate's accepted answer 它应该很有启发性。但我只想说,当人们说“集合是无序的”时,他们的意思是“你不能依赖任何特定的顺序”
标签: python python-3.x set python-3.9 unordered