heapq.n最大产生不一致的结果

2024-04-24 06:51:01 发布

您现在位置:Python中文网/ 问答频道 /正文

如果多次执行以下代码,则会产生不一致的结果。我用Python-3.5.1在debian8.4(jessie)上运行它。在

from heapq import nlargest
from operator import itemgetter

dd = dict([('41', 768.0), ('2', 15275.0), ('9', 1728.0), ('90', 1728.0),
           ('97', 1200.0), ('68', 2904.0), ('98', 4380.0), ('16', 768.0),
           ('37', 768.0), ('17', 1587.0), ('25', 4495.4)])

print(nlargest(5, dd.items(), key=itemgetter(1)))

多次执行后的输出:

^{pr2}$

看起来很随机,有人能解释一下为什么会这样吗?在

如果将dd.items()替换为sorted(dd.items()),则输出将变为确定性。i、 e

^{3}$

我还用python-2.7在OSX和CentOS6.7上尝试了上面的代码,它总是返回

^{3}$

这是Python3heapq实现中的一个bug吗?在


Tags: key代码fromimportitemsoperatordictdd
1条回答
网友
1楼 · 发布于 2024-04-24 06:51:01

你要的是最大的5件商品,第5位有一个平局。Python如何打破这种联系是任意的,任何涉及到的不确定性行为都不是一个bug。在

它不确定的原因是因为dict迭代顺序是任意的,而且自从python3.3以来,字符串和某些其他类型的散列随机化在默认情况下是启用的。因此,heapq.nlargest接收dict项的顺序有一个随机成分,它打破联系的方式取决于它看到项目的顺序。在

相关问题 更多 >