【发布时间】:2015-02-10 13:07:19
【问题描述】:
我有以下场景 -
In [2]: from heapq import heappush, heappop
In [3]: pq =[]
In [4]: heappush(pq, (2, "I hate sth"))
In [5]: heappush(pq, (2, "I love sth"))
In [6]: heappush(pq, (2, "I gate sth"))
In [7]: heappop(pq)
Out[7]: (2, 'I gate sth')
在这里,我希望堆返回 (2, "I hate sth") 我的意思是如果有任何重复项,那么它应该返回最先插入的最小项。我知道这里的项目是元组,所以第三个显然很小。
但是有什么方法可以分别存储优先级和字符串,如果有平局,则按插入顺序返回项目。
谢谢
【问题讨论】:
-
一种解决方法可能是创建一个用于添加到堆中的辅助方法,该方法将在元组的第二个位置插入并增加一个计数器。
-
是的,我正在考虑这样做,但还有其他选择吗,比如 python 是否允许我将优先级队列存储为(键、对象),其中对象不包含在优先级计算中。
-
或者,不使用元组,而是为队列中的项目创建自己的类,该类将仅使用第一个元素进行比较,或自动处理所述计数器。
标签: python priority-queue