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

时间:2018-12-20 07:04:06

标签: python heap heapq

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

  1. 我正在使用heapq.merge()对多个列表进行排序。用2〜8个列表迭代器进行测试,结果完全相同。列表包含1万〜25万个项目。
  2. 列表元素本身实现了要对列表进行排序所需的全部内容(__ lt __(),__ eq __()等)。
  3. 我测试了这些特殊的排序方法,无论是在对列表本身进行排序时,还是在调用heapq.merge()方法时。
  4. 我确保列表中没有重复的条目。甚至没有交叉列表。使用一个简单的运行编号,该编号附加到每个元素上,并在比较中使用。

输出: 在遍历2个各有25K项的列表时,我得到了100K的结果。 加倍金额。

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

有任何线索吗?

2 个答案:

答案 0 :(得分:0)

heapq.merge不会消除重复项。查看here以获取更多信息

答案 1 :(得分:0)

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