heapq模块(Heap Queue)堆队列,或优先队列。堆实际是一个使用数组实现的完全二叉树,这个数据结构非常适合表示优先队列。如果你不熟悉堆,查看 wiki 上的解释。
heapq的主要属性是:每次pop出的元素都是最小值;不管怎么push/pop元素,都维持这个堆结构。
Python heapq模块中的函数
heapify(iterable) :使用iterable对象构造堆
heappush(heap, ele) :向堆中插入数据
heappop(heap) :从堆中移除并获得最小的元素
import heapq
li = [3, 8, 5, 5, 7, 9, 1, 3]# li = []
# 初始化
heapq.heapify(li)
# 构造的堆结构
print(list(li))# [1, 3, 3, 5, 7, 9, 5, 8]符合 li[k] <= li[2*k+1] && li[k] <= li[2*k+2]
# 插入元素
heapq.heappush(li, 4)
heapq.heappush(li, 2)
heapq.heappush(li, 99)
print(list(li))# [1, 2, 3, 4, 3, 9, 5, 8, 5, 7, 99]
# 排序
for i in range(len(li)):
print(heapq.heappop(li)) # 返回堆中的最小值
#1
#2
#3
#3
#4
#5