Python 标准模块堆heapq详解

import heapq
nums = [ 8, 2, 23, 1, 7, -4, 18, 23, 42, 37, 2]
# heapq.heapify  将list x 转换成堆,原地,线性时间内。
heapq.heapify(nums)
print(nums)

# heapq.heappush(heap, item)
# 将 item 的值加入 heap 中,保持堆的不变性。
heapq.heappush(nums, 33)
print(nums)

# heapq.heappop(heap)
# 弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 。使用 heap[0] ,可以只访问最小的元素而不弹出它。
heapq.heappop(nums)
print(nums)
# 访问heap最小的值
small= nums[0]
print(small)
# heapq.heappushpop(heap, item)
#将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用 heappush() 再调用 heappop() 运行起来更有效率。
samll_one = heapq.heappushpop(nums, 1000)
print(samll_one,nums)

# heapq.heapreplace(heap, item)
#弹出并返回 heap 中最小的一项,同时推入新的 item。 堆的大小不变。 如果堆为空则引发 IndexError。
# 这个单步骤操作比 heappop() 加 heappush() 更高效,并且在使用固定大小的堆时更为适宜。 pop/push 组合总是会从堆中返回一个元素并将其替换为 item。
second_small = heapq.heapreplace(nums, 90000)
print(second_small,nums)
#  反转堆
heapq._heapify_max(nums)
print(11111,nums[0])
#  删除堆中最大的
heapq._heappop_max(nums)
print("delete",nums)
#  弹出并返回 heap 中最大的一项,同时推入新的 item。 堆的大小不变。 如果堆为空则引发 IndexError。
heapq._heapreplace_max(nums, 90)
print(44444444444,nums)

# heapq.nlargest(n, iterable, key=None)
# 返回前三个比较大的list
large_list = heapq.nlargest(3, nums)
print(large_list)
# heapq.nsmallest(3, nums)
# 返回后三个比较小的list
last_list= heapq.nsmallest(3, nums)
print(last_list)

portfolio = [
    {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    {'name': 'FB', 'shares': 200, 'price': 21.09},
    {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    {'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
print(cheap)
print(expensive)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值