[英]Are sets ordered like dicts in python3.6
由于 Python 3.6 中dict
实现的变化,它现在默认排序。 现在set
保留顺序吗?
我找不到任何关于它的信息,但由于这两种数据结构在其底层工作方式上非常相似,我认为可能是这种情况。
我知道没有承诺在所有情况下都订购dict
,但大多数情况下都是如此。 正如 Python 文档中所述:
这个新实现的顺序保留方面被认为是一个实现细节,不应依赖
不, set
仍然是无序的。
您可以通过显示一个应该具有“明确定义的散列顺序” 1的set
来验证这一点,以确保我们不会意外地得到一个看起来有序但实际上不是的set
:
>>> a_set = {3,2,1}
>>> a_set
{1, 2, 3}
>>> list(a_set)
[1, 2, 3]
如果它是有序的,您会期望{3, 2, 1}
和[3, 2, 1]
作为示例的结果。
虽然dict
s实际上是有序的(同一个例子只是做了一点修改):
>>> a_dict = {3: 3, 2: 2, 1:1}
>>> a_dict
{3: 3, 2: 2, 1: 1}
>>> list(a_dict)
[3, 2, 1]
1 “明确定义的哈希顺序”:
对于满足0 <= integer < sys.hash_info.modulus
的0 <= integer < sys.hash_info.modulus
, hash
只是数字本身。 这意味着如果集合是基于散列“基于”排序(而不是基于插入“时间”排序)并且散列值不冲突(这就是为什么我使用小数字和仅相差一个的数字)顺序应该是确定性的,因为它们占据集合内彼此相邻的插槽:
以后者为例:
>>> a_set = {6,7,8,9}
>>> a_set
{8, 9, 6, 7}
set
s 在 Python 3.6 中没有排序,甚至没有作为 CPython 实现细节。 一个简单的例子说明了这一点:
>>> import string
>>> string.digits
'0123456789'
>>> set(string.digits)
{'7', '0', '2', '8', '6', '9', '1', '5', '4', '3'}
Python 3文档对此很清楚:
集合是没有重复元素的无序集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.