Python学习:heapq模块

五迷三道 提交于 2020-01-18 02:12:50

简介

在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()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!