当前位置: 首页 > 面试题库 >

设置迭代顺序因运行而异

柯永福
2023-03-14
问题内容

为什么Python集合(具有相同内容)的迭代顺序会在每次运行之间变化,我有什么选择使其在每次运行之间保持一致?

我了解Python集合的迭代顺序是任意的。如果我将“ a”,“ b”和“ c”放入集合中,然后对其进行迭代,则它们可能会以任何顺序返回。

我观察到的是,该顺序在程序运行中保持不变。也就是说,如果我的程序连续两次对同一集合进行迭代,那么两次都将得到相同的顺序。但是,如果我连续两次运行该程序,则顺序会在运行之间变化。

不幸的是,这破坏了我的一项自动测试,该测试只是比较程序两次运行的输出。我不在乎实际的顺序,但我希望每次运行都保持一致。

我想出的最好的解决方案是:

  1. 将集合复制到列表。
  2. 将任意排序应用于列表。
  3. html" target="_blank">迭代列表而不是集合。

有没有更简单的解决方案?

注意:我在StackOverlow上发现了类似的问题,但是没有一个问题解决了从运行到运行获得相同结果的特定问题。


问题答案:

您想要的是不可能的。任意意味着任意。

我的解决方案与您的解决方案相同,如果您希望将其与另一组进行比较,则必须对它进行排序。



 类似资料:
  • 问题内容: 好的,我认为这可能是一个老问题,但是我在stackoverflow上没有发现任何东西。在go中,不保证地图上的迭代顺序是可重现的。因此,建议的方法是将键保留在一个切片中并对该切片进行排序。然后,对该切片进行迭代以从映射中检索值,以便我们按顺序获取它们(因为由键组成的切片已排序,因此将以可再现的顺序排列)。因此,这意味着需要对切片进行排序,否则切片上的迭代也不会给出可重现的顺序。但是,当

  • 问题内容: 我担心给出的文件和目录的顺序。如果我有这些目录,,,,,,,,,,,,,什么是输出列表的顺序? 它是按数值排序的吗? 或按ASCII值排序,如? 此外,如何获得特定的排序? 问题答案: 用途。这是的文档字符串: listdir(路径)-> list_of_strings 返回一个列表,其中包含目录中条目的名称。 该列表按任意顺序排列 。它不包括特殊条目“。” 和“ ..”,即使它们存在

  • 问题 你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。 解决方案 heapq.merge() 函数可以帮你解决这个问题。比如: >>> import heapq >>> a = [1, 4, 7, 10] >>> b = [2, 5, 6, 11] >>> for c in heapq.merge(a, b): ... print(c) ... 1 2 4 5 6 7

  • 如何在迭代中更改python迭代器? 例如: 此打印: 我想打印: 编辑:抱歉,这个问题让人们感到困惑。我对为什么当我在for循环中尝试更改迭代器时,for循环在下一次迭代中忽略它很感兴趣。 其他人已经提交了一个答案来清除我的困惑。范围创建一个列表,然后for循环将迭代器分配给列表中的下一个变量。

  • 问题内容: 我有一个HashMap,每次我获得迭代器时,我都希望以不同的随机顺序迭代它们的键值对。从概念上讲,我想在调用迭代器之前对地图进行“混洗”(或者,如果需要,可以对迭代器进行“混洗”)。 我有两种选择: 1)使用LinkedHashMap的方法,并在内部保留条目列表,将其随机洗净,并在调用迭代器时返回该视图。 2)使用map.entrySet(),构造一个ArrayList并在其上使用sh

  • 问题内容: 我需要一个Map,它可以 按其值 的降序进行迭代。是否有像Apache Commons或Guava这样的标准库提供这种地图? 问题答案: 我会用番石榴来做到这一点,如下所示: