Python编程:heapq模块堆排序

简介: 堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。 整个堆的最小元素总是位于二叉树的根节点。 python的heapq模块提供了对堆的支持。 堆数据结构最重要的特征是heap[0]永远是最小的元素

堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。

整个堆的最小元素总是位于二叉树的根节点。

python的heapq模块提供了对堆的支持。

堆数据结构最重要的特征是heap[0]永远是最小的元素


代码示例

import heapq

# 添加元素,容器是list列表,元素存放顺序是小根堆的顺序
h = []
heapq.heappush(h, 2)
heapq.heappush(h, 3)

h
Out[6]: 
[2, 3]


# 列表转换为堆
lst = [2, 3, 4, 6, 9, 1, 5]
heapq.heapify(lst)
lst
Out[9]: 
[1, 3, 2, 6, 9, 4, 5]


# 弹出最小值
heapq.heappop(lst)
Out[10]: 
1

lst
Out[11]: 
[2, 3, 4, 6, 9, 5]


# 弹出最小值,添加新元素
heapq.heapreplace(lst, 8)
Out[14]: 
2
lst
Out[15]: 
[3, 6, 4, 8, 9, 5]


# 和根元素比较,如果比其大则替换
heapq.heappushpop(lst, 4)
Out[16]: 
3
lst
Out[17]: 
[4, 6, 4, 8, 9, 5]

# 和根元素比较,如果比其小则不替换
heapq.heappushpop(lst, 3)
Out[18]: 
3
lst
Out[19]: 
[4, 6, 4, 8, 9, 5]


# 合并堆
h = [10, 11, 13]
l = heapq.merge(lst, h)
list(l)
Out[25]: 
[4, 6, 4, 8, 9, 5, 10, 11, 13]

# 查询最大的n个元素
heapq.nlargest(3, lst)
Out[26]: 
[9, 8, 6]

# 查询最小的n个元素
heapq.nsmallest(3, lst)
Out[27]: 
[4, 4, 5]

参考

  1. python3入门之堆(heapq)
  2. Python标准库模块之heapq
            </div>
目录
相关文章
|
存储 Java 区块链
fabric智能合约
fabric智能合约
580 0
|
算法 定位技术
ArcGIS中ArcMap栅格图像平滑滤波:焦点统计、滤波器、重采样
ArcGIS中ArcMap栅格图像平滑滤波:焦点统计、滤波器、重采样
736 1
|
JSON 小程序 前端开发
微信小程序开发入门学习01-TDesign模板解读
微信小程序开发入门学习01-TDesign模板解读
|
机器学习/深度学习 数据采集 数据可视化
【机器学习】样本、特征、标签:构建智能模型的三大基石
【机器学习】样本、特征、标签:构建智能模型的三大基石
6073 0
|
Java jvm-sandbox 测试技术
脑洞:字节码加强 (1) 日志收集方案
日志收集方案 动态日志level APM方案埋点解析 tomcat访问日志收集 业务问题排查方案 性能测试
2009 0
|
Shell 开发工具 Android开发
如何确认 fastboot unlock 解锁成功,如何确认DM-verity 已关闭
如何确认 fastboot unlock 解锁成功,如何确认DM-verity 已关闭
1804 0
|
数据库管理
麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
|
流计算 调度 缓存
Apache Flink 进阶(一):Runtime 核心机制剖析
本文主要介绍 Flink Runtime 的作业执行的核心机制。首先介绍 Flink Runtime 的整体架构以及 Job 的基本执行流程,然后介绍在这个过程,Flink 是怎么进行资源管理、作业调度以及错误恢复的。最后,本文还将简要介绍 Flink Runtime 层当前正在进行的一些工作。
Apache Flink 进阶(一):Runtime 核心机制剖析
快看,虚拟机跟宿主机之间竟然可以使用SVN(2)
快看,虚拟机跟宿主机之间竟然可以使用SVN
301 0
快看,虚拟机跟宿主机之间竟然可以使用SVN(2)
|
数据采集 机器学习/深度学习 存储
FastNN模型库
FastNN(Fast Neural Networks)是一个基于PAISoar实现分布式训练的基础算法库,当前FastNN只支持计算机视觉的部分经典算法,后续会逐步开放更多的先进模型。
FastNN模型库