首页 > 解决方案 > heapq.merge() 迭代器遍历的项比列表中的多

问题描述

遵循 heapq.merge() 的文档- 我得到了非常奇怪的结果,并且找不到我做错了什么......设置如下:

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

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

我相信我遵循了这里的所有要求。我应该在将列表输入 heapq.merge 之前对列表进行堆放吗?文档中没有这样说,也不清楚应该/是否应该这样做。

有什么线索吗?

标签: pythonheapheapq

解决方案


好的,只是为了澄清这里发生的事情:我的错误是(不小心......)遍历列表的迭代器,而不是列表本身。奇怪的是,函数/编译器没有拒绝它!一旦我自己传递了列表,该功能就可以正常工作。


推荐阅读