【问题标题】:Why iter() sorts in place a set in Python?为什么 iter() 在 Python 中对集合进行排序?
【发布时间】:2022-01-06 19:03:49
【问题描述】:

在 Python 中对集合调用 iter() 似乎可以对集合进行就地排序。

例子:

>>> my_set = {2, 1, 3}
>>> _ = iter(my_set)
>>> my_set
{1, 2, 3}

我想知道为什么会这样。我想这与在 cPython 中为 set 实现 __iter____next__ 的方式有关,但我不确定。

欢迎提出任何想法。


编辑

正如下面的答案和 cmets 所指出的,_ = iter(my_set) 不会改变结果 - my_set 打印“有序”。原因详细解释here

【问题讨论】:

  • 如果你去掉_ = iter(my_set),你会得到什么?
  • iter 与它无关,我使用输出{1, 2, 3}new_set={2,1,3};new_set 获得相同的结果。我想这更多地与如何首先构建(无序)集合有关
  • 请参阅here 以获得似乎不错的解释;具体来说,关于“定义明确的哈希顺序”的部分。它实际上根本没有得到排序。没有任何顺序的保证,但一组数字可能碰巧看起来是排序的,似乎。他们给出了一个没有得到“排序”的集合的例子 - {6,7,8,9} 打印为 {8, 9, 6, 7}
  • @RandomDavis:非常感谢您的链接!

标签: python python-3.x set


【解决方案1】:

没有_ = iter(my_set),结果也会排序

>>> my_set = {2, 1, 3}
>>> my_set
{1, 2, 3}

【讨论】:

    【解决方案2】:

    集合是无序的,这意味着当您调用它们时它们可以以不同的顺序出现。在此处查看更多信息:https://www.w3schools.com/python/python_sets.asp

    【讨论】:

      【解决方案3】:

      如@S4eed3sm 所述,使用{} 创建一个变为无序 的集合。然而,这不是迭代器的重点。

      通过使用迭代器,您可以在迭代器上调用next() 方法来获取迭代器中的下一项。这是迭代器的目的,而不是对集合进行排序。

      如果你想对一个列表进行排序,例如,你可以使用python内置的sorted()方法。

      【讨论】:

        猜你喜欢
        • 2020-09-16
        • 2016-07-14
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 1970-01-01
        相关资源
        最近更新 更多