python cookbook 1.4 找到最大或者最小的N个元素 heapq

#1.4找到最大或最小的N个元素,堆
#heapq模块中两个函数  nlargest()和nsmallest()
import heapq
nums = [5,12,6,2,7,3,-1,-6,66]
print(heapq.nlargest(3,nums))  #最大的3个元素
print(heapq.nsmallest(3,nums))   #最小的3个元素

#这两个函数都可以接受参数key,从而可以工作在更复杂的数据结构上,按key排序
portfolio = [
    {'name':'IBM','shares':55,'price':91.1},
    {'name':'apple','shares':100,'price':543.1},
    {'name':'ms','shares':60,'price':31.1},
    {'name':'oracle','shares':200,'price':111.1},
    {'name':'google','shares':77,'price':61.1}
]
cheap = heapq.nsmallest(3,portfolio,key=lambda s:s['price'])  #按price升序排列
expensive = heapq.nlargest(3,portfolio,key=lambda s:s['price'])  #按price降序排列
print(cheap)
print(expensive)

#堆最重要的特性heap[0]总是最小那个元素(小顶堆)
import heapq
nums = [5,12,6,2,7,3,-1,-6,66]
heap = list(nums)
heapq.heapify(heap)
print(heap)   #按照小顶堆的特性排列
print(heap[0])   #获取堆顶也就是最小值

 

heapq.heappop(heap)
print(heap)
heapq.heappop(heap)
print(heap)
heapq.heappop(heap)
print(heap)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值