gpt4 book ai didi

python - 集合是否像 python3.6 中的 dicts 一样排序

转载 作者:IT老高 更新时间:2023-10-28 22:12:27 26 4
gpt4 key购买 nike

由于 Python 3.6 中 dict 实现的变化,现在默认排序。 sets 现在也保留顺序吗?

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

我知道 dict 不能在所有情况下都被订购,但大多数情况下都是如此。如 Python 文档中所述:

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

最佳答案

不,set s 仍然是无序的。

您可以通过显示 set 来验证这一点应该有一个“定义明确的哈希顺序”1 以确保我们不会意外得到 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 的整数hash只是数字本身。这意味着如果集合是根据散列“基于”排序的(而不是基于插入“时间”排序)并且散列值不冲突(这就是我使用小数字和仅相差一个的数字的原因)顺序应该是确定性的,因为它们占据了集合中彼此相邻的插槽:

  • 从小到大
  • 或从特定值到最高值,然后从最小值到特定值。如果集合中的下一个(在相邻的意义上)空闲槽位是第一个空闲槽位,则会发生这种情况。

以后者为例:

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

关于python - 集合是否像 python3.6 中的 dicts 一样排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45581901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com