由于Python 3.6中的dict
实现发生了变化,现在默认情况下,它是按顺序排列的。现在set
也能保持顺序吗?
我找不到关于它的任何信息,但由于这两种数据结构在幕后的工作方式非常相似,我想可能是这样的。
我知道在任何情况下都不能保证dict
s被订购,但大多数情况下都是这样。如Python文档所述:
The order-preserving aspect of this new implementation is considered an implementation detail and should not be relied upon
Tags:
不,
set
s仍然是无序的。您可以通过显示应该具有“定义良好的散列顺序”的
set
来验证这一点,以确保我们不会意外地得到看起来有序但实际上不是这样的set
:如果它是有序的,那么您将期望
{3, 2, 1}
和[3, 2, 1]
作为示例的结果。当
dict
s实际上是有序的(同一个例子只是稍微修改了一下):1“定义良好的散列顺序”:
对于满足
0 <= integer < sys.hash_info.modulus
的整数,hash
只是数字本身。这意味着,如果集合是根据散列“排序”的(而不是根据插入“时间”排序),并且散列值没有冲突(这就是为什么我使用小数字和只相差一个的数字),那么顺序应该是确定的,因为它们占据了集合中彼此相邻的插槽:作为后者的一个例子:
set
s在Python 3.6中没有排序,甚至没有作为CPython实现细节排序。一个简单的例子说明了这一点:Python 3docs清楚地表明了这一点:
相关问题 更多 >
编程相关推荐