python创建和使用堆的方法

Python通过heapq模块实现最小堆,可对列表进行堆化、插入、弹出等操作,支持高效获取极值及模拟最大堆。

python创建和使用堆的方法

Python 中没有专门的“堆”类型,但可以通过内置模块 heapq 来创建和使用堆。heapq 模块提供了对列表进行堆操作的函数,实现的是最小堆(min-heap)结构。

1. 创建堆

堆在 Python 中本质上是一个普通列表,通过 heapq 提供的函数维护堆的性质。

使用 heapq.heapify() 可将一个无序列表转换为最小堆:

原地修改列表,不返回新对象时间复杂度为 O(n)

立即学习“Python免费学习笔记(深入)”;

import heapq

data = [3, 1, 4, 1, 5, 9, 2, 6]heapq.heapify(data)print(data) # 输出: [1, 1, 2, 3, 5, 9, 4, 6](满足最小堆结构)

2. 插入元素(入堆)

使用 heapq.heappush(heap, item) 向堆中添加元素:

保持堆结构不变时间复杂度为 O(log n)

立即学习“Python免费学习笔记(深入)”;

heap = []heapq.heappush(heap, 3)heapq.heappush(heap, 1)heapq.heappush(heap, 4)print(heap)  # 输出: [1, 3, 4]

3. 弹出最小元素(出堆)

使用 heapq.heappop(heap) 弹出并返回堆顶(最小值):

弹出后自动调整堆结构常用于获取当前最小元素

立即学习“Python免费学习笔记(深入)”;

min_val = heapq.heappop(heap)print(min_val)  # 输出: 1print(heap)     # 输出: [3, 4]

4. 其他常用操作

heapq 还提供一些实用函数:

heappushpop(heap, item):先入堆再弹出最小值,效率高于分开调用heapreplace(heap, item):先弹出最小值,再入堆,堆大小不变nlargest(n, iterable):获取最大 n 个元素nsmallest(n, iterable):获取最小 n 个元素

立即学习“Python免费学习笔记(深入)”;

# 示例:获取最小的两个数nums = [5, 1, 8, 3, 9]two_smallest = heapq.nsmallest(2, nums)print(two_smallest)  # 输出: [1, 3]

若需要最大堆,可通过取负值模拟:

max_heap = []heapq.heappush(max_heap, -10)heapq.heappush(max_heap, -20)largest = -heapq.heappop(max_heap)print(largest)  # 输出: 20

基本上就这些。heapq 简单高效,适合实现优先队列、求 TopK、合并多路有序序列等场景。

以上就是python创建和使用堆的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1380958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 22:33:12
下一篇 2025年12月14日 22:33:19

相关推荐

发表回复

登录后才能评论
关注微信