【发布时间】:2010-10-03 00:41:58
【问题描述】:
为什么 Python 集(具有相同内容)的迭代顺序因运行而异,我有哪些选项可以使其在运行之间保持一致?
我了解 Python 集的迭代顺序是任意的。如果我将 'a'、'b' 和 'c' 放入一个集合中然后迭代它们,它们可能会以任何顺序返回。
我观察到的是,在程序运行中顺序保持不变。也就是说,如果我的程序连续两次迭代同一个集合,我两次得到相同的顺序。但是,如果我连续两次运行该程序,则顺序会从运行变为运行。
不幸的是,这破坏了我的一个自动化测试,它只是比较了我的程序两次运行的输出。我不关心实际的顺序,但我希望它在运行之间保持一致。
我想出的最佳解决方案是:
- 将集合复制到列表中。
- 对列表应用任意排序。
- 迭代列表而不是集合。
有没有更简单的解决方案?
注意:我在 StackOverlow 上发现了类似的问题,但没有一个可以解决每次运行都获得相同结果的特定问题。
【问题讨论】:
-
如果您要测试的是“程序两次输出相同的内容”,那么排序列表选项是您的最佳选择。如果您要测试的是“程序两次创建相同的集合”,则需要进行集合比较(通过对两次运行的输出进行酸洗,然后对两者的输出进行解酸并比较它们,或者道德上等价的东西)。
-
@Russell:我有单元测试来验证设置的内容。但我也有这个测试,它比较两次运行的输出作为健全性检查。输出部分取决于集合中项目的顺序,但仅以迂回的方式。