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

常见坑

相关推荐
测试19984 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
曲幽7 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
前端若水8 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
涛声依旧-底层原理研究所9 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer
csdn_aspnet9 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
fantasy_arch10 小时前
pytorch人脸匹配模型
人工智能·pytorch·python
熊猫_豆豆10 小时前
广义相对论水星近日点进动完整详细数学推导
python·天体·广义相对论
web3.088899910 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
AI算法沐枫10 小时前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
X1A0RAN11 小时前
解决Pycharm中部分文件或文件夹被隐藏不展示问题
ide·python·pycharm