Python3中的Heapq无法与元组一起使用,因为它不会按期望顺序弹出

时间:2019-01-05 21:27:13

标签: python heapq

每个人都说,如果将元组推入heapq,它将把第一个参数作为比较因子。

但是不是!我很好奇我的代码有什么问题吗?

for task_name, counter in tasks_counter.items():
    heappush(tasks_q, (-int(counter), task_name, counter))
heapify(tasks_q)
while tasks_q:
    print(tasks_q.pop())

输出

(-1, 'G', 1)
(-1, 'F', 1)
(-1, 'E', 1)
(-1, 'D', 1)
(-1, 'C', 1)
(-1, 'B', 1)
(-6, 'A', 6)

我认为我应该首先获取具有值A的商品,对吗? 但这不是。

是否可以在Python中使用内置优先级队列的其他解决方案?

另一个示例的输出。

enter image description here

1 个答案:

答案 0 :(得分:4)

您正在使用pop的{​​{1}}功能。您需要使用heapq.heappop函数。它将调整列表以在此过程中保持堆不变。参见Basic Examples

如果您从list开始并反复呼叫heapify,也不必呼叫[]heappush已经确保保持堆不变。