python3入门之堆(heapq)

堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。整个堆的最小元素总是位于二叉树的根节点。python的heapq模块提供了对堆的支持。
堆数据结构最重要的特征是heap[0]永远是最小的元素

heapq.heappush(heap,item) 
注:heap为定义堆,item增加的元素

>>> import heapq
>>> h = []
>>> heapq.heappush(h,2)
>>> h
[2]


heapq.heapify(list) 
注:将列表转换为堆

>>> list = [1,2,3,5,1,5,8,9,6]
>>> heapq.heapify(list)
>>> list
[1, 1, 3, 5, 2, 5, 8, 9, 6]


heapq.heappop(heap) 
注:删除最小值,因为堆的特征是heap[0]永远是最小的元素,所以一般都是删除第一个元素。

>>> list
[1, 1, 3, 5, 2, 5, 8, 9, 6]
>>> heapq.heappop(list)
1
>>> list
[1, 2, 3, 5, 6, 5, 8, 9]


heapq.heapreplace(heap.item) 
注:删除最小元素值,添加新的元素值

>>> list
[1, 2, 3, 5, 6, 5, 8, 9]
>>> heapq.heapreplace(list,99)
1
>>> list
[2, 5, 3, 9, 6, 5, 8, 99]


heapq.heapreplace(heap,item) 
注:首先判断添加元素值与堆的第一个元素值对比,如果大,则删除第一个元素,然后添加新的元素值,购置不更改堆

>>> list
[2, 5, 3, 9, 6, 5, 8, 99]
>>> heapq.heappushpop(list,6)
2
>>> list
[3, 5, 5, 9, 6, 6, 8, 99]
>>> heapq.heappushpop(list,1)
1
>>> list
[3, 5, 5, 9, 6, 6, 8, 99]


heapq.merge(…) 
注:将多个堆合并

>>> list
[3, 5, 5, 9, 6, 6, 8, 99]
>>> h
[1000]
>>> for i in heapq.merge(h,list):
...     print(i,end=" ")
...
3 5 5 9 6 6 8 99 1000 


heapq.nlargest(n,heap) 
注:查询堆中的最大元素,n表示查询元素个数

>>> list
[3, 5, 5, 9, 6, 6, 8, 99]
>>> heapq.nlargest(3,list)
[99, 9, 8]
>>>

heapq.nsmallest(n,heap) 
注:查询堆中的最小元素,n表示查询元素的个数

>>> list
[3, 5, 5, 9, 6, 6, 8, 99]
>>> heapq.nsmallest(3,list)
[3, 5, 5]
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值