📜  Python的优先队列(1)

📅  最后修改于: 2023-12-03 14:46:45.657000             🧑  作者: Mango

Python的优先队列

优先队列是一种特殊的队列,其中的每个元素都有一个优先级。具有较高优先级的元素先被处理,而具有较低优先级的元素则被延迟处理。

Python 的 heapq 模块提供了用于实现优先队列的函数和类。

实现优先队列的方法
使用列表

可以使用 Python 的列表来表示优先队列。

向列表中添加元素时,将元素添加到列表的末尾,然后使用 heapq 模块的 heappush() 函数将其排序。使用 heappop() 函数删除具有最高优先级的元素。

import heapq

queue = []
heapq.heappush(queue, 4)
heapq.heappush(queue, 1)
heapq.heappush(queue, 7)
heapq.heappush(queue, 3)

print(queue) # [1, 3, 7, 4]

while queue:
    print(heapq.heappop(queue)) # 1, 3, 4, 7
使用优先队列类

Python 的 queue 模块中提供了 PriorityQueue 类,支持插入元素和移除优先级最高的元素。该类内部是通过堆来实现优先队列的。

import queue

q = queue.PriorityQueue()

q.put((4, 'apple'))
q.put((1, 'banana'))
q.put((7, 'orange'))
q.put((3, 'pear'))

while not q.empty():
    print(q.get()) # (1, 'banana'), (3, 'pear'), (4, 'apple'), (7, 'orange')
注意事项
  • 优先级越低的元素优先级越高。
  • 如果有两个元素具有相同的优先级,它们将按照它们最初添加到队列中的顺序进行处理。
  • 队列中的所有元素必须是可比较的。