如何在不使用类的情况下在Python中反转优先级队列?

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)

不起作用,有什么帮助吗?

the*_*eye 8

常见的模式是将数据作为元组插入优先级.所以,你可以简单地改变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)