次のコードは、複数回実行すると一貫性のない結果を生成します。私はPython-3.5.1でDebian 8.4(jessie)上で実行しました。複数の実行後heapq.nlargestは一貫性のない結果を生成します
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)))
出力:
[('2', 15275.0), ('25', 4495.4), ('98', 4380.0), ('68', 2904.0), ('90', 1728.0)]
[('2', 15275.0), ('25', 4495.4), ('98', 4380.0), ('68', 2904.0), ('9', 1728.0)]
[('2', 15275.0), ('25', 4495.4), ('98', 4380.0), ('68', 2904.0), ('90', 1728.0)]
[('2', 15275.0), ('25', 4495.4), ('98', 4380.0), ('68', 2904.0), ('90', 1728.0)]
それがランダムに見えるなぜこれが起こっている、誰も説明できますか?
dd.items()
をsorted(dd.items())
に置き換えた場合、出力は確定的になります。すなわち
[('2', 15275.0), ('25', 4495.4), ('98', 4380.0), ('68', 2904.0), ('9', 1728.0)]
私はまたのpython-2.7とOSXとCentOS6.7上のコードの上に試みたが、それは常に
[('2', 15275.0), ('25', 4495.4), ('98', 4380.0), ('68', 2904.0), ('9', 1728.0)]
を返し、これはのpython3 heapq
実装にバグがあることができますか?
OSとPythonのバージョンはどちらを使用していますか?出力はWin10とPython 2.7と3.4 64bitで一定です。 –
Python-3.5.1のDebian 8.4(jessie)です。 – zyxue
興味深いことに、Pythonのバグかもしれません。私はちょうどOS XでPython 2.7を試したところ、出力は一貫しています。私はそれがヒープの問題かもしれないと思った。 – zyxue