加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在python3.6中,集合的顺序是像dicts一样

发布时间:2020-12-20 10:34:28 所属栏目:Python 来源:网络整理
导读:由于 Python 3.6中dict实现的更改,现在默认排序.现在也设置保留顺序吗? 我找不到任何关于它的信息,但由于这两种数据结构在它们工作的方式非常相似,我认为可能就是这种情况. 我知道在所有情况下都没有订购dicts的承诺,但它们大部分时间都是如此.如Python文档
由于 Python 3.6中dict实现的更改,现在默认排序.现在也设置保留顺序吗?

我找不到任何关于它的信息,但由于这两种数据结构在它们工作的方式非常相似,我认为可能就是这种情况.

我知道在所有情况下都没有订购dicts的承诺,但它们大部分时间都是如此.如Python文档中所述:

The order-preserving aspect of this new implementation is considered an implementation detail and should not be relied upon

解决方法

不,套装仍然是无序的.

您可以通过显示应该具有“明确定义的哈希顺序”1的集合来验证这一点,以确保我们不会意外地获得看起来有序但实际上不是的集合:

>>> a_set = {3,2,1}
>>> a_set
{1,3}
>>> list(a_set)
[1,3]

如果它被订购,你会期望{3,1}和[3,1]作为例子的结果.

虽然dicts实际上是有序的(相同的例子只是稍微修改):

>>> a_dict = {3: 3,2: 2,1:1}
>>> a_dict
{3: 3,1: 1}
>>> list(a_dict)
[3,1]

1“定义良好的哈希顺序”:

对于满足0 <=整数<的整数sys.hash_info.modulus哈希只是数字本身.这意味着如果集合在哈希上“基于”排序(而不是基于插入“时间”排序)并且哈希值不会发生冲突(这就是为什么我使用的小数字和数字只相差一个)的顺序应该是确定性的,因为它们占据了集合中彼此相邻的插槽:
>从最小到最高
>或从特定值到最高值,然后从最小值到特定值.如果集合中的下一个(在邻居意义上)空闲时隙是第一个,则会发生这种情况.

作为后者的一个例子:

>>> a_set = {6,7,8,9}
>>> a_set
{8,9,6,7}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读