heapq.merge() 迭代器遍历的项目多于列表中的项目

heapq.merge() iterator goes through more items than in the lists

在 heapq.merge() 的 docs 之后 - 我得到了非常奇怪的结果,并且找不到我做错了什么......设置如下:

  1. 我正在使用 heapq.merge() 对多个列表进行排序。用2~8个列表迭代器测试,结果完全一样。列表包含 10K ~ 25K 项。
  2. 列表元素本身实现了列表排序所需的所有功能(__ lt__(), __ eq__(), ...)。
  3. 我测试了这些特殊的排序方法被调用,无论是在对列表本身进行排序时,还是在调用 heapq.merge() 方法时。
  4. 我确保列表不包含任何重复条目。甚至没有交叉列表。使用我附加到每个元素并用于比较的简单 运行 数字。

输出: 在遍历 2 个列表时,每个列表包含 25K 个项目,我得到了 100K 个结果。 双倍投入。

我相信我遵守了这里的所有要求。我应该在将列表输入 heapq.merge 之前将它们堆砌起来吗? docs 中没有这么说,也不清楚如何 should/if 完成。

有线索吗?

heapq.merge 不会消除重复项。查看 here 了解更多信息

好的, 只是为了弄清楚这里发生的事情: 我的错误是(不小心......)路径 iterators 的列表,而不是列表本身。奇怪的是,function/compiler并没有拒绝它! 一旦我自己通过了列表,该功能就可以正常工作了。