Python中优先级较高的优先级队列

Ash*_*hok 11 python queue priority-queue

我需要一个优先级队列来获取具有最高优先级值的项目.我目前正在使用Queue库中的PriorityQueue类.但是,此函数仅返回具有最低值的项目.我尝试了一些丑陋的解决方案,如(sys.maxint - priority)作为优先级,但只是想知道是否存在更优雅的解决方案.

Mar*_*ers 19

请改为使用否定优先级,无需减去sys.maxint.

queue.put((-priority, item))
Run Code Online (Sandbox Code Playgroud)

例如,优先级为-10的项目将在优先级为-5的项目之前返回.

  • 虽然这有效,但老实说它让我感到困扰,因为这意味着所有其他相关的逻辑在你的脑海中都被颠倒了。 (2认同)
  • @blueman:然后对队列类进行子类化,并重写方法以为您转换优先级。 (2认同)

ana*_*ask 8

您可以扩展优先级队列以保持逻辑不变:

from Queue import PriorityQueue

class DualPriorityQueue(PriorityQueue):
    def __init__(self, maxPQ=False):
        PriorityQueue.__init__(self)
        self.reverse = -1 if maxPQ else 1

    def put(self, priority, data):
        PriorityQueue.put(self, (self.reverse * priority, data))

    def get(self, *args, **kwargs):
        priority, data = PriorityQueue.get(self, *args, **kwargs)
        return self.reverse * priority, data


minQ = DualPriorityQueue()
maxQ = DualPriorityQueue(maxPQ=True)

minQ.put(10, 'A')
minQ.put(100, 'A')


maxQ.put(10, 'A')
maxQ.put(100,'A')

print "Min DQ: {}".format(minQ.get())
print "Max DQ: {}".format(maxQ.get())
Run Code Online (Sandbox Code Playgroud)

输出:

Min DQ: (10, 'A')
Max DQ: (100, 'A')
Run Code Online (Sandbox Code Playgroud)