Python heapq (堆/优先队列)

文章目录

  • [heapq 是什么](#heapq 是什么)
  • 基本操作:建堆、入堆、出堆
    • [heapq 只有最小堆,怎么做最大堆?经典做法:取相反数](#heapq 只有最小堆,怎么做最大堆?经典做法:取相反数)
    • [堆里放"复杂对象":用 tuple 做优先级](#堆里放“复杂对象”:用 tuple 做优先级)
  • 创建空堆
      • [heapq:没有"自定义比较函数"参数;要靠放入的元素本身可比较(通常用 tuple 的第一个元素当优先级)](#heapq:没有“自定义比较函数”参数;要靠放入的元素本身可比较(通常用 tuple 的第一个元素当优先级))
    • [在 Python 里堆就是一个 list,所以判断"堆不空"最常用就是看列表是否为空。](#在 Python 里堆就是一个 list,所以判断“堆不空”最常用就是看列表是否为空。)
    • 常见坑

heapq 是什么

什么是堆呢?

堆是一棵完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。 如果父亲结点是大于等于左右孩子就是大顶堆,小于等于左右孩子就是小顶堆。

所以大家经常说的大顶堆(堆头是最大元素),小顶堆(堆头是最小元素)

基本操作:建堆、入堆、出堆

python 复制代码
import heapq

a = [5, 1, 4, 2, 8]
heapq.heapify(a)
print(a)       # 变成堆的内部结构(不保证整体有序) [1, 2, 4, 5, 8]
print(a[0])    # 最小值



heapq 只有最小堆,怎么做最大堆?经典做法:取相反数

堆里放"复杂对象":用 tuple 做优先级


创建空堆


heapq:没有"自定义比较函数"参数;要靠放入的元素本身可比较(通常用 tuple 的第一个元素当优先级)

在 Python 里堆就是一个 list,所以判断"堆不空"最常用就是看列表是否为空。

注意时heap不是heapq,heap是你自己起的名字,是你自己起的列表

常见坑

相关推荐
shimly123456几秒前
python3 venv 是啥?
python
aqi007 分钟前
15天学会AI应用开发(六)使用离线大模型对文本生成摘要
人工智能·python·ai编程
codecrafter12313 分钟前
sh:在 Python 里直接调系统命令
开发语言·python·其他
金銀銅鐵32 分钟前
用 Tkinter 实现简单的论语第一章阅读器
后端·python
小玮看世界32 分钟前
【技术成长实录】北京地铁12号线数据分析系统:从一个观察到一个完整项目的演进之路
python·人机交互·学习方法·cicd·项目交付
极光代码工作室33 分钟前
基于机器学习的金融风险预测系统
python·深度学习·机器学习·ai·系统设计
吴阿福|一人公司35 分钟前
Python 类变量修改的压力测试:高并发场景
开发语言·python
hikktn36 分钟前
Excel 日期格式统一治理:从“显示不全“到“自动兼容“的完整方案
windows·python·excel
财经资讯数据_灵砚智能1 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月11日
人工智能·python·ai·信息可视化·自然语言处理·ai编程·灵砚智能
CC数学建模1 小时前
2026年第十六届APMCM 亚太地区大学生数学建模竞赛(中文赛项)赛题C题:创业社区规划与资源配置优化问题完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模