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是你自己起的名字,是你自己起的列表

常见坑

相关推荐
狗狗学不会4 分钟前
RK3588 极致性能:使用 Pybind11 封装 MPP 实现 Python 端 8 路视频硬件解码
人工智能·python·音视频
love530love15 分钟前
EPGF 新手教程 21把“环境折磨”从课堂中彻底移除:EPGF 如何重构 AI / Python 教学环境?
人工智能·windows·python·重构·架构·epgf
ldccorpora16 分钟前
Chinese News Translation Text Part 1数据集介绍,官网编号LDC2005T06
数据结构·人工智能·python·算法·语音识别
大学生毕业题目16 分钟前
毕业项目推荐:99-基于yolov8/yolov5/yolo11的肾结石检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·肾结石检测
寄思~17 分钟前
Excel 数据匹配工具 -笔记
笔记·python·学习·excel
其美杰布-富贵-李1 小时前
PyTorch Lightning
人工智能·pytorch·python·training
开开心心_Every1 小时前
安卓做菜APP:家常菜谱详细步骤无广简洁
服务器·前端·python·学习·edge·django·powerpoint
SiYuanFeng1 小时前
pytorch常用张量构造词句表和nn.组件速查表
人工智能·pytorch·python
MistaCloud1 小时前
Pytorch深入浅出(十四)之完整的模型训练测试套路
人工智能·pytorch·python·深度学习
知乎的哥廷根数学学派1 小时前
基于物理信息嵌入与多维度约束的深度学习地基承载力智能预测与可解释性评估算法(以模拟信号为例,Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习