每个人都说,如果将元组推入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中使用内置优先级队列的其他解决方案?
答案 0 :(得分:4)
您正在使用pop
的{{1}}功能。您需要使用heapq.heappop
函数。它将调整列表以在此过程中保持堆不变。参见Basic Examples。
如果您从list
开始并反复呼叫heapify
,也不必呼叫[]
。 heappush
已经确保保持堆不变。