我只是在学习Python中的优先级队列,我做了以下代码:
def main():
q=Queue.PriorityQueue()
while True:
n=input("numbre?")
if n==0:
break
else:
q.put(n)
print n
while not q.empty():
print q.get()
当我输入数据时:9、1、4、5
它打印 1,4,5,9,这似乎是正确的,但我想知道我该如何以相反的顺序进行克脱,我的意思是:9,5,4,1
我知道如何使用类来做到这一点,但在这种情况下,它似乎是以下额外的代码:
def __cmp__():
-cmp(q.get(),q.get())
不行,有什么帮助吗?
常见的模式是将数据作为元组与优先级一起插入。因此,您可以像这样简单地更改put
q.put((-n ,n))
因此,当比较元组时,如果数字是 9、1、4 和 5,它们将像这样进行比较 (-9, 9(、(-1, 1(、(-4, 4( 和 (-5, 5(。由于-9
是最小的,因此将首先检索它,然后检索 -5,然后检索 -4 和 -1。
例:
from Queue import PriorityQueue
numbers, Q = [9, 1, 4, 5], PriorityQueue()
for number in numbers:
Q.put((-number, number))
while not Q.empty():
print Q.get()
输出
(-9, 9)
(-5, 5)
(-4, 4)
(-1, 1)
要仅获取实际值,只需打印第二个元素,如下所示
while not Q.empty():
print Q.get()[1]