一种著名的数据结构是堆(heap),它是一种优先队列。优先队列让你能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。相比于列表方法min,这样做的效率要高得多。
实际上,Python没有独立的堆类型,而只有一个包含一些堆操作函数的模块。这个模块名为heapq(其中的q表示队列)。
函数库如下:
1.heapify(list):将序列list改变成heap结构
2.heappush(heap, item):向序列heap中插入一个item元素
3.heappop(heap):pop出heap堆中的最小值
4.heapreplace(heap, item):先pop出最小值,再向heap中添加item元素
5.heappushpop(heap, item): 与heapreplace方向相反
6.nlargest(n, iterable, key=None):返回heap的前n个最大的元素的list
7.nsmallest(n, iterable, key=None):返回heap的前n个最小的元素的list
下面我们来做一下演示:
首先我们导入heapq库:
from heapq import *
创建一个列表,使用heapify函数将列表改变成heap结构:
list1 = [1,65,23,5,17,3,54,899]
heapify(list1)
输出list1如下:
使用heappush向list1中插入一个元素:
heappush(list1,25)
输出list1如下:
使用heappop输出list1堆中的最小值,并将最小值命名为a:
a = heappop(list1)
输出a和更新后的list1如下:
heapreplace和heappushpop的用法差不多,就一起演示了
heapreplace(list1,15)
heappushpop(list1,89)
输出list1如下:
我们向list1中输入了15和89,同时将原来list1中的两个最小元素给剔除掉
使用nlargest和nsmallest函数取出堆中的前n个的最大(最小)元素的list
list2 = nlargest(4,list1)
list3 = nsmallest(4,list1)
输出值如下: