需求:
- 实现一个按优先级排序的队列,能够push和pop数据
- 在队列上每次pop都是返回优先级最高的元素
- 如果优先级相同,按它们最初被加入时的顺序返回
- 如果优先级发生改变,你该如何将其移至新的位置?
使用标准库heapq来一步步的实现。
heapq模块提供了堆排序算法的实现。注意这里指的是堆排序算法的实现而不是一个数据结构。
有关heapq模块的详细介绍可以查看官方文档https://docs.python.org/zh-cn/3.6/library/heapq.html
需求1:
首先定义一个元素。
class Item:
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Item({})'.format(self.name)
实现一个按优先级排序的队列,具有push和pop方法。
class PriorityQueue:
def __init__(self):
self._queue = []
def push(self, item, priority):
heapq.heappush(self._queue, (priority, item))
def pop(self):
value = heapq.heappop(self._queue)