Python数据结构堆(heapq)库使用

python数据结构——快速掌握简单高效的堆排序heapq库堆算法 python heapq库实现堆与对排序的用法,引用库的方法:import heapq;如果想省去前缀就使用from heapq import* 阅读详情

Python heapq库的用法介绍

一.heapq库简介

heapq 库是Python标准库之一,提供了构建小顶堆的方法和一些对小顶堆的基本操作方法(如入堆,出堆等),可以用于实现堆排序算法。

二.使用heapq创建堆

1、heappush(heap,n)数据堆入

import heapq
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
heap = []
for num in array:
    heapq.heappush(heap, num)
print("array:", array)
print("heap: ", heap)

运行结果:

array: [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
heap:  [5, 7, 21, 15, 10, 24, 27, 45, 17, 30, 36, 50]

2、heappop(heap)将数组堆中的最小元素弹出

heapq.heappop(heap)

运行结果:

5

3、heapify(heap) 将heap属性强制应用到任意一个列表

heapify 函数将使用任意列表作为参数,并且尽可能少的移位操作,,将其转化为合法的堆。如果没有建立堆,那么在使用heappush和heappop前应该使用该函数。

heapq.heapify(array)
print("array:", array)

运行结果:

array: [5, 7, 21, 10, 17, 24, 27, 45, 15, 30, 36, 50]

4、heapreplace(heap,n)先将堆顶的数据出堆,然后将n添加到堆中。

heapq.heapreplace(heap,0.5)

运行结果:

heap:  [0.5, 7, 21, 15, 10, 24, 27, 45, 17, 30, 36, 50]

5、获取堆中的最小值或最大值

nlargest(num, heap),从堆中取出num个数据,从最大的数据开始取,返回结果是一个列表(即使只取一个数据)。如果num大于等于堆中的数据数量,则从大到小取出堆中的所有数据,不会报错,相当于实现了降序排序。

nsmallest(num, heap),从堆中取出num个数据,从最小的数据开始取,返回结果是一个列表。

array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
heapq.heapify(array)
print(heapq.nlargest(2, array))
print(heapq.nsmallest(3, array))

运行结果:

[50, 45]
[5, 7, 10]

6、使用heapq合并两个有序列表

merge(list1, list2),将两个有序的列表合并成一个新的有序列表,返回结果是一个迭代器。这个方法可以用于归并排序。

array_a = [10, 7, 15, 8]
array_b = [17, 3, 8, 20, 13]
array_merge = heapq.merge(sorted(array_a), sorted(array_b))
print("merge result:", list(array_merge))

运行结果:

merge result: [3, 7, 8, 8, 10, 13, 15, 17, 20]

参考文献

[1] Python heapq库的用法介绍
[2] 【python】详解python数据结构堆(heapq)库使用

Python heapq库的用法介绍 阅读详情

相关推荐

Python中的heapq模块

我们可以将待排序的数据构建成一个小顶堆,每次从堆顶弹出数据,收集弹出的数据,这样我们就可以获得一个排完序的序列。,直接将可迭代的对象转换成小顶堆。有两种方法可以用于创建堆,第一种是直接使用方法。模块实现了堆队列的算法,即优先队列算法。方法返回的是当前堆中的最小元素。将元素手动放入指定的。

Shen Mu Xin's Blog 1883

Python 基础 (标准库):heapq (堆)

Python 基础(标准库):堆 heap

AbigailQin 的博客 1万+

Python - 优先队列(queue.PriorityQueue & heapq)

Python中优先队列的用法

优快云 1万+

python中的heapq库

heapq库

苏钟白的博客 6040

82、创建堆:Python中堆数据结构的实现与操作

本文详细介绍了堆这一特殊的树形数据结构及其在Python中的实现与操作。通过Python内置的heapq库,可以轻松创建和管理堆,包括heapify、heappush、heappop和heapreplace等核心操作。文章还探讨了堆的内部机制、应用场景(如优先队列、堆排序、Dijkstra算法)、实现细节以及与其他数据结构的对比,并提供了具体的代码示例帮助理解。堆以其高效的插入和删除性能,在需要频繁处理最小或最大元素的场景中表现出色。

agile9scrum的博客 89

UE5.5使用ControlRig实现MetaHumanNPC看向玩家

本文介绍了在虚幻引擎中实现NPC自然看向玩家的技术方案。通过MetaHuman的ControlRig系统,采用面部动画曲线+全身动画Montage的表演方式,结合ControlRig驱动CTRL_lookat控制器实现视线追踪。

平常心 1302

【python】详解python数据结构堆(heapq)库使用

数据结构堆(heap)是一种优先队列。使用优先队列能够以任意顺序增加对象,并且能在任意的时间(可能在增加对象的同时)找到(也可能移除)最小的元素,也就是说它比python的min方法更加有效率。 1、heappush(heap,n)数据堆入 In [1]: import heapq as hq In [2]: import numpy as np In [3]: data = np.ara

brucewong0516的博客 4万+

RAG在医药行业为什么80%都翻车了?

这篇文章不是要劝你别做RAG,而是把坑说清楚。医药行业有它的特殊性——监管压力、专业术语密度、多语言混排、文档结构复杂——这些因素叠加在一起,让标准RAG教程里的那套方法论几乎直接失效

qq_31808385的博客 635

堆(基于Python)以及heapq库的操作

文章目录堆heapq库 堆 堆是一棵二叉树,并且拥有以下特点:他的父节点的值小于或等于他的任何子节点的值。 在数组实现中,他们的关系表示为:heap[k]≤heap[2×k+1]heap[k] \le heap[2 \times k+1]heap[k]≤heap[2×k+1]和heap[k]≤heap[2×k+2]heap[k] \le heap[2 \times k+2]heap[k]≤heap[2×k+2],对于所有的k值都要成立,k从0开始计算。最重要的一点是,它的最小值元素是根元素heap[0]he

MichaelYLI的博客 380

Python量化投资——mplfinance实现全功能动态交互式K线图(蜡烛图)【源码+详解】

特别鸣谢:@szFoxtech 同学热心提供了通过键盘操作平移和缩放K线图的代码!!在我的另一篇文章《七行代码利用tushare和mplfinance生成K线图》中,我介绍了两个非常好用的python库,结合起来可以非常方便容易地生成股票的K线图,对于使用python进行量化投资研究的朋友可谓是必备良方。如下图所示,仅仅几行代码,就能生成下面这张K线图:不过,仅仅使用七行代码生成的K线图,虽然看上去也像那么回事了,但是对于真正需要使用K线图作为研究工具或者可视化工具的朋友们来说,是远远不够的。在我看来,至少

m0_67390379的博客 9832

手把手教你解决Windows 10网络驱动器无法访问问题(附详细排查步骤)

本文详细指导Windows 10用户解决网络驱动器无法访问的常见问题。通过从现象快速定位到系统排查,提供了从检查网络连通性、修复凭据权限到调整高级设置的完整步骤,特别是针对“找不到网络路径”等错误,帮助用户高效恢复对共享资源的访问。

weixin_29233857的博客 516

python数据结构-堆

一种特殊的树结构:每个父节点小于或者等于其子结点,称为最小堆 如果每个父节点大于等于子结点,称为最大堆 实施优先级 队列 是非常有用的 在该队列中,具有较高权重的队列项目在处理中具有更高的优先级 堆是通过使用python内建的名为heapq的库创建的 heapify - 此函数将常规列表转换为堆。在结果堆中,最小的元素被推到索引位置0.但其余的数据元素不一定被排序。 heappush - 这个函数...

菜鸟高的博客 486

基于截图详解:SAP GUI for Java 如何设置登录链接,以及 conn= 连接字符串该怎么写

摘要:SAP GUI for Java 的连接属性配置关键是在"高级"页签的"conn="后填写连接字符串。连接字符串格式取决于网络拓扑:直连应用服务器使用"/H/主机/S/端口";通过消息服务器负载均衡使用"/M/消息服务器/S/端口/G/组名";经SAProuter访问则需添加路由器前缀。配置时需注意专家模式会覆盖其他页签设置,且连接字符串还支持附加参数如客户端、语言和默认事务码。具体填写内容应根据Basis团队提供的系统信

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

python堆_Python堆

堆是一种特殊的树结构,其中每个父节点小于或等于其子节点。 然后它被称为最小堆(Min Heap)。 如果每个父节点大于或等于其子节点,则称它为最大堆(Max Heap)。 实施优先级队列是非常有用的,在该队列中,具有较高权重的队列项目在处理中具有更高的优先级。在本章中,我们将学习使用python实现堆数据结构。创建一个堆堆是通过使用python内建的名称为heapq的库创建的。 该库具有对堆数据结...

weixin_39836876的博客 303

【Microchip】微芯 MPLAB® X IDE开发环境新建项目(点亮1颗LED灯)(常用右键菜单快捷键)

1.新建项目2. 选择芯片型号和调试器3.选择编译器4.项目命名和选择文件路径5.新建成功,给项目添加main.c7.将新建的mainXC16.c文件添加进项目6000000UL这三个就是。

Naiva的博客 446

AI编码规则:从提示工程到自动化,提升大模型生成代码质量

在软件工程领域,代码质量是保障软件可维护性、安全性和团队协作效率的核心。其背后遵循着从基础语法规范到架构设计原则的一系列工程实践。随着大语言模型(LLM)在代码生成任务中的广泛应用,如何确保AI生成的代码符合这些工程标准,成为一个关键的技术挑战。这涉及到将人类工程师积累的最佳实践,转化为机器可理解、可执行的明确约束。通过系统化的**编码规则**定义与集成,例如构建涵盖安全、风格、架构的多层次规则集,并将其融入**提示工程**或自动化工作流,可以显著引导AI产出更健壮、规范的代码。这种方法的价值在于,它能将模

weixin_42525189的博客 641

heapq源码解读(一)

本文是解读heapq源码的初始章节,主要目的是介绍heapq这个库的基本使用方法。

qq_37511129的博客 1392

【QGIS入门实战精品教程】1.2:QGIS与ArcGIS的区别和联系

以下是GISGeography官方给出的两者之间的27点比较(译): 官方网址:https://gisgeography.com/qgis-arcgis-differences/ 1.QGIS容纳更多的数据格式 ArcGIS没有支持所有的数据格式,毫无疑问,QGIS在处理各种类型的数据时非常顺手,QGIS在数据格式方面是个多面手,在使用数据方面是它的长处。 QGIS使用GDAL/OGR库来读取和写入地理信息数据格式,支持超过70种矢量格式。QGIS一开始就是为了与PostGIS协作而诞生的,而支持的名单.

智慧空间实验室 2039

python最小堆_Python堆

本篇文章帮大家学习python堆,包含了Python堆使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。堆是一种特殊的树结构,其中每个父节点小于或等于其子节点。 然后它被称为最小堆(Min Heap)。 如果每个父节点大于或等于其子节点,则称它为最大堆(Max Heap)。 实施优先级队列是非常有用的,在该队列中,具有较高权重的队列项目在处理中具有更高的优先级。在本章中,...

weixin_36035900的博客 747

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python Heap:全面指南

在Python编程中,堆(Heap)是一种非常重要的数据结构。它是一种特殊的树形数据结构,其每个父节点的值都小于或等于其子节点的值。这种数据结构常用于实现优先队列(Priority Queue),它是一种支持优先级操作的队列,可以用于实现排序算法和其他算法中。可以这样讲:堆是一种特殊的列表,它总是保持一个特性:列表中任何一个元素(除了最后一个),都比它的后一个元素要小。在Python中,我们可以使用一个名为heapq的库来创建和操作堆。现在,您应该对堆有一个更全面的理解。如果您有其他问题,请随时提问。

canduecho的专栏 762

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python高级数据结构——堆

文章目录Python高级数据结构——堆概念接口函数初始化 Heapify弹出最大/最小值push数据heapreplaceMerge两个数组前n个最大/小的数应用堆排序参考 Python高级数据结构——堆 概念 在一个 最小堆 (min heap) 中,如果 P 是 C 的一个父级节点,那么 P 的 key(或 value) 应小于或等于 C 的对应值。 正因为此,堆顶元素一定是最小的,我们会利用这个特点求最小值或者第 k 小的值。 在一个 最大堆 (max heap) 中,P 的 key(或 value)

PJZero 1286

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

无涯教程-Python - 堆(Heaps)

堆(Heaps)是一种特殊的树结构,其中每个父节点均小于或等于其子节点,这就是所谓的最小堆,如果每个父节点大于或等于其子节点,则称为最大堆。堆是使用python内置的名为heapq的库创建的,该库具有相关的功能,可以对堆数据结构执行各种操作。下面是这些功能的列表。

无涯教程 1261

PyTips 0x10 - Python 的堆与优先队列

项目地址:https://git.io/pytips Python 中内置的 heapq 库和 queue 分别提供了堆和优先队列结构,其中优先队列 queue.PriorityQueue 本身也是基于 heapq 实现的,因此我们这次重点看一下 heapq。 堆(Heap)是一种特殊形式的完全二叉树,其中父节点的值总是大于子节点,根据其...

weixin_33850015的博客 165

【数据结构】堆

堆,或者说优先队列,是一颗完全二叉树 一般用数组存储,节点i的左、右子节点分别为2*i+1、2*i+2 堆分为小根堆和大根堆(python中为小根堆),小根堆的父节点的值小于或等于子节点的值 heapq 创建堆 import heapq heap=[] heapq.heapify(heap) 添加元素 heapq.heappush(heap,num) 弹出元素 弹出堆顶元素,对于python,是最小元素 heapq.heappop(heap) 取最值 取n个最值,返回一个列表 h

可可卷的博客 838

python heapq数据结构

python中堆的使用 相关实现原理 其实 堆 只是将list中的元素位置进行改变以满足堆的数据结构要求即可; 并且每次 增删改 时 都会移动元素位置以保证 满足 堆 特性 所以 堆的 数据结构仍然是 list而已;只是每次对 堆的操作 都需要将list作为参数 传入堆的函数中; 堆的数据结构要求为: i处的元素总是大于位置i // 2处的元素;注意和下标无关 如: 此堆结构: [1.11, 2, 1.5, 3, 8, 5, 4, 6, 7, 11, 9, 10] 则以 第i=6位的数...

rgc_520_zyl的博客 235

【智能算法】堆优化算法原理及其Python实现

堆优化算法是一种基于堆数据结构的优化算法,通过利用堆的特性(最大堆或最小堆)来提升传统算法的性能。其核心思想是将数据存储在堆结构中,以便快速获取极值元素,从而显著降低时间复杂度。在Dijkstra算法等图论问题中,堆优化可将时间复杂度从O(n²)降至O((m+n)logn),极大提升大规模数据处理的效率。Python中可通过heapq库实现堆操作,支持高效的元素插入、删除和极值查找。该算法广泛应用于最短路径计算、任务调度和大数据处理等领域,但实现复杂度较高,需根据具体场景权衡其优势与局限。未来在人工智能、物

大雨淅淅的博客 1947
上一篇: 堆与栈的区别(数据结构角度)
下一篇: 二叉树理论基础篇
CV-ROBOT
博客等级 码龄9年 47粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值