heapq 模块

本文介绍了Python标准库heapq模块,详细讲解了堆的概念,包括小顶堆和大顶堆,并列举了heapq提供的核心方法如heapify、heappush、heappop等,通过实例展示了如何使用这些方法操作堆数据结构。heapq模块在处理优先级队列和需要快速找到最小元素的场景中非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python标准库系列文章目录

python内建模块
collections 模块:deque双向队列
queue module:队列、优先级队列
sortedcontainers:有序列表、有序字典和有序集合



前言

堆是什么?
Python中的堆


一、堆是什么?

  堆是一个完全二叉树,它的每个父节点的值都只会小于或等于所有孩子节点(的值)。 它使用了数组来实现:从零开始计数,对于所有的 k ,都有 heap[k] <= heap[2\*k+1]heap[k] <= heap[2\*k+2]。 为了便于比较,不存在的元素被认为是无限大。 堆最有趣的特性在于最小的元素总是在根结点:heap[0] (小顶堆,大顶堆则相反)。

图1 小顶堆
图2 大顶堆

二、heapq Methods

import heapq

heapq.heapify(x)将list x 转换成堆,原地,线性时间内
heapq.heappush(heap, item)将item推入到堆heap中
heapq.heappop(heap)弹出并返回 heap 的最小的元素(弹出堆顶元素),保持堆的不变性。如果堆为空,抛出 IndexError 。使用 heap[0] ,可以只访问最小的元素而不弹出它
heapq.heappushpop(heap, item)将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用 heappush() 再调用 heappop() 运行起来更有效率
heapq.heapreplace(heap, item)  弹出并返回 heap 中最小的一项,同时推入新的 item。 堆的大小不变。 如果堆为空则引发 IndexError。
  这个单步骤操作比 heappop() 加 heappush() 更高效,并且在使用固定大小的堆时更为适宜。 pop/push 组合总是会从堆中返回一个元素并将其替换为 item。
  返回的值可能会比添加的 item 更大。 如果不希望如此,可考虑改用 heappushpop()。 它的 push/pop 组合会返回两个值中较小的一个,将较大的值留在堆中。
heap = [6,8,9,4,3,1,4,6,8]
heapq.heapify(heap)         # 将列表变为堆的顺序,默认是 小顶堆
print(heap)                 #[1, 3, 4, 4, 8, 9, 6, 6, 8] heap的类型依然是list
heapq.heappush(heap, 0)
heapq.heappop(heap)

总结

介绍了Python中的heapq

https://docs.python.org/zh-cn/3/library/heapq.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值