简介
在Python中,heapq模块是实现最小堆的模块。
堆是非线性的树形数据结构,有两种堆,即最大堆与最小堆。
最大堆,指的是树的各个父节点的值,总是大于或者等于任何一个子节点的值。
最小堆,指的是树的各个父节点的值,总是小于或者等于任何一个子节点的值。因此整个最小堆的最小元素总是位于树的根节点。
在Python提供的heapq模块中,堆数据结构最重要的特征是heap[0]永远是最小的元素。
方法
在heapq模块中,模块提供的方法如下:
方法原型 | 方法解析 |
---|---|
heapq.heappush(heap,item) | 将元素item推送至堆heap中 |
heapq.heappop(heap) | 从堆中弹出最小元素,如果堆是空,则IndexError,获取最小元素而不弹出元素,可使用heap[0]。函数返回堆中最小元素。 |
heapq.heappushpop(heap,item) | 将元素item推送至堆heap中,然后从堆中弹出最小元素。函数返回最小元素。 |
heapq.heapify(x) | 将列表x转换为堆,即创建堆 |
heapq.heapreplace(heap,item) | 弹出堆中的最小元素,然后将元素item推送至堆中,如果堆是空,则IndexError。函数返回堆中最小元素 |
heapq.merge(*iterables,key=None,reverse=False) | 将多个排序过的可迭代列表合并成一个排序列表,函数返回输出列表的迭代器,参数key确定一个排序方法函数,如key=str.lower,参数reverse为倒序的布尔类型设置标志 |
heapq.nlargest(n,iterable,key=None) | 从iterable定义的列表中返回n个最大元素组成的列表。参数key确定一个排序方法函数 |
heapq.nsmallest(n,iterable,key=None) | 从iterable定义的列表中返回n个最小元素组成的列表。参数key确定一个排序方法函数 |
关于函数heapq.merge的范例:
import heapq
import random
random.seed(2016)
data = []
for i in range(4):
new_data = list(random.sample(range(1, 101), 5))
new_data.sort()
data.append(new_data)
for i, d in enumerate(data):
print('{}: {}'.format(i, d))
print('\nMerged:')
for i in heapq.merge( * data):
print(i, end=' ')
print()
来源:CSDN
作者:篡篡
链接:https://blog.csdn.net/jiangzhangha/article/details/103794567