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



我只是在学习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]

最新更新