import heapqclass PriorityQueue: def __init__(self): self._queue = [] self._index = 0 def push(self, item, priority): # priority越大表示元素优先级越高,-priority就越小,因此越能优先pop heapq.heappush(self._queue, (-priority, self._index, item)) self._index += 1 def pop(self): # 返回heap中最小的元素 return heapq.heappop(self._queue)[-1]class Item: def __init__(self, name): self.name = name def __repr__(self): return f"Item({self.name})"# 观察实际效果q = PriorityQueue()q.push(Item("foo"), 1) # 优先级与元素4相同,但index小于元素4,因此优先popq.push(Item("bar"), 5) # 优先级最高q.push(Item("spam"), 4) # 优先级次之q.push(Item("grok"), 1)q.pop() # Item('bar')q.pop() # Item('spam')q.pop() # Item('foo')