代码之家  ›  专栏  ›  技术社区  ›  mon

iter内置函数是否尽可能对集合元素进行排序?复制

  •  0
  • mon  · 技术社区  · 11 月前

    iter 从无序集合生成有序集合,如下所示。这个排序结果是否是Python3的保证行为?

    >>> x = {1, 9, 2, 8, 4, 6}
    >>> y = iter(x)
    >>> list(y)
    [1, 2, 4, 6, 8, 9]      # <--- Sorted
    
    1 回复  |  直到 11 月前
        1
  •  2
  •   Tim Peters    11 月前

    不。没有定义集合的迭代顺序(无论是通过 iter(set) for e in set:

    在一组字符串上尝试一下,你可能会发现顺序会随着运行而变化。

    你所看到的是如何 hash(int) 恰好是计算的,以及它与今天在CPython下如何实现集合的交互。

    在最近的PyPy中,情况有所不同:

    Python 3.10.12 (af44d0b8114cb82c40a07bb9ee9c1ca8a1b3688c, Jun 15 2023, 15:42:22)
    [PyPy 7.3.12 with MSC v.1929 64 bit (AMD64)] on win32
    ...
    >>>> x = {1, 9, 2, 8, 4, 6}
    >>>> y = iter(x)
    >>>> list(y)
    [1, 9, 2, 8, 4, 6]
    

    因此,原来的订单恰好被保留了下来——这也不能保证。