堆heapq-python

heapq

两个函数——nlargest()和nsmallest()

>> import heapq
>>> nums=[1,8,2,23,7,-4,18,23,42,37,2]
>>> print(heapq.nlargest(3,nums))
[42, 37, 23]
>>> print(heapq.nsmallest(3,nums))
[-4, 1, 2]
heap=list(nums)
>>>heapq.heapify(nums)#将列表原地转换成堆
>>> nums
[-4, 2, 1, 23, 7, 2, 18, 23, 42, 37, 8]

heapq.heappop(nums) #轻松的找到最小的元素

常用

from heapq import *
import heapq #载入heap库,heap指的是最小堆 
heapq.heappush(heap, item): 将 item 的值加入 heap 中,保持堆的不变性。

heapq.heappop(heap):弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 使用 heap[0] ,可以只访问最小的元素而不弹出它。
heapq.heappushpop(heap, item):将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用  heappush() 再调用 heappop() 运行起来更有效率。
heapq.heapify(x) #使数组转化为堆** ,原地,线性时间内。
heapq.heapreplace(heap, item):弹出并返回 heap 中最小的一项,同时推入新的 item。 堆的大小不变。先弹出再推入,heappushpop是先推入在弹出最小

#####   堆元素item可以为元组
 Python3以后的版本中,如果元组(priority,task)priority是一样的,而且task没有一个默认的比较参照值,那这样我们其实是没有办法来比较的。  
 我们可以采用三元数组的方法。设置一个优先级,一个条目值,一个任务值。  有相同优先级的时候,因为条目值不一样可以帮助cpu来裁决它们被加载的顺序 
##### 方法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值