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>
目录
相关文章
|
新零售 Cloud Native Devops
坚持伙伴优先,阿里云颁发合作伙伴年度奖项
2023年4月26日,2023阿里云合作伙伴颁奖盛典在南京举行,阿里云向核心伙伴颁发年度奖项。
坚持伙伴优先,阿里云颁发合作伙伴年度奖项
|
编解码 人工智能 自然语言处理
Ruyi:图森未来推出的图生视频大模型,支持多分辨率、多时长视频生成,具备运动幅度和镜头控制等功能
Ruyi是图森未来推出的图生视频大模型,专为消费级显卡设计,支持多分辨率、多时长视频生成,具备首帧、首尾帧控制、运动幅度控制和镜头控制等特性。Ruyi基于DiT架构,能够降低动漫和游戏内容的开发周期和成本,是ACG爱好者和创作者的理想工具。
786 33
Ruyi:图森未来推出的图生视频大模型,支持多分辨率、多时长视频生成,具备运动幅度和镜头控制等功能
|
安全 Java
什么是枚举?
什么是枚举?
238 2
|
11月前
|
自然语言处理 人机交互 数据库
TransferTOD:利用LLM解决TOD系统在域外场景槽位难以泛化的问题
任务型对话系统旨在高效处理任务导向的对话,如何利用任务型对话系统准确、高效、合理地完成信息采集的工作一直是一项关键且具有挑战性的任务。
451 18
|
监控 BI 数据处理
RPA技术在金融领域的应用?
【8月更文挑战第4天】RPA技术在金融领域的应用?
343 1
|
物联网 开发工具 C++
AliOS Things 的 ESP32 应用开发流程
本文介绍 Windows 下基于 AliOS Things 的 ESP32 应用开发流程,包括环境搭建、程序编译、固件烧写。
10492 5
|
存储 编译器 程序员
2023-4-4-C++应该怎么设计一个好的项目结构
2023-4-4-C++应该怎么设计一个好的项目结构
921 0
|
数据可视化 算法 计算机视觉
【计算机视觉】图像增强----图像的傅立叶变换
【计算机视觉】图像增强----图像的傅立叶变换
1005 0
【计算机视觉】图像增强----图像的傅立叶变换
|
人工智能
ChatGPT+ “剪映 or 百度AIGC” 快速生成短视频
ChatGPT+ “剪映 or 百度AIGC” 快速生成短视频
527 0