-2

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

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

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

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

有什么线索吗?

4

2 回答 2

0

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

于 2018-12-20T07:51:33.157 回答
0

heapq.merge不会消除重复。在这里查看更多信息

于 2018-12-20T07:23:33.357 回答