Python中heapq库中函数的用法

一种著名的数据结构是堆(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)

输出值如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值