Lay*_*yla 5 python priority-queue python-2.7
我只是学习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()
Run Code Online (Sandbox Code Playgroud)
当我输入数据时:9,1,4,5
它打印1,4,5,9这似乎是正确的,但我想知道如何以相反的顺序进行双击,我的意思是:9,5,4,1
我知道如何使用类,但在这种情况下,它似乎是以下额外的代码:
def __cmp__():
-cmp(q.get(),q.get())
Run Code Online (Sandbox Code Playgroud)
不起作用,有什么帮助吗?
常见的模式是将数据作为元组插入优先级.所以,你可以简单地改变put这个
q.put((-n ,n))
Run Code Online (Sandbox Code Playgroud)
因此,当比较元组时,如果数字是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()
Run Code Online (Sandbox Code Playgroud)
产量
(-9, 9)
(-5, 5)
(-4, 4)
(-1, 1)
Run Code Online (Sandbox Code Playgroud)
要仅获取实际值,只需打印第二个元素,就像这样
while not Q.empty():
print Q.get()[1]
Run Code Online (Sandbox Code Playgroud)