python中堆的用法
Python 堆(Headp)
Python中堆是一种基于二叉树存储的数据结构。
主要应用场景:
对一个序列数据的操作基于排序的操作场景,例如序列数据基于最大值最小值进行的操作。
堆的数据结构:
Python 中堆是一颗平衡二叉树(关于二叉树参考数据结构相关知识),且基于小堆进行存储。
何为小堆,简单的说就是根节点永远不大于子节点的一种存储树,如下所示:

为何会形成图示的二叉树,这跟二叉树的存储及翻转规则有关,比较复杂,如果感兴趣,可查阅数据结构相关知识。
特性:
(1)堆的数据要基于链表(List)进行操作(堆中的数据是基于链表进行操作)。
(2)堆直接基于链表操作,不再开辟新的存储空间。
(3)堆头永远都是最小的值。
(4)堆的检索是根据中序遍历方式:根节点 --> 左节点 -->右节点
常用方法:
1 import heapq2 3 # (1)创建一个空堆,并加入数据4 heap = []5 for item in [2, 3, 1, 4]:6 heapq.heappush(heap, item)7 print heap # 输出 [1, 3, 2, 4]8 9 # (2)根据链表构建一个堆 --> heapify 10 l = [2, 3, 1, 4] 11 heapq.heapify(l) 12 print l # 输出 [1, 3, 2, 4] 13 14 # (2)向堆中追加元素 -->heappush 15 heapq.heappush(l, -10) 16 print l # 输出 [-10, 1, 2, 4, 3] 17 18 # (3) 弹出堆头(返回堆头之后堆再进行翻转,堆头保持最小值) -->heappop 19 print heapq.heappop(l) # 输出 -10 20 print l # 输出 [1, 3, 2, 4] 21 print heapq.heappop(l) # 输出 1 22 print l # 输出 [2, 3, 4] 23 24 # (4) 替换第一个元素,并构建堆 --> heapreplace 25 l = [2, 3, 1, 4] 26 print heapq.heapreplace(l, 100) # 输出 2 27 print l # 输出 [1, 3, 100, 4] 28 29 # (5)合并多个链表 --> merge 30 l = [1, 3, 2] 31 l2 = [5, 2, 3] 32 l3 = [9, 2, 3, 1] 33 print list(heapq.merge(l, l2, l3)) # 输出 [1, 3, 2, 5, 2, 3, 9, 2, 3, 1] 34 35 # (6)多路归并 --> merge 36 # 对每一个链表进行排序,再对排序后的列表进行合并 37 print list(heapq.merge(sorted(l), sorted(l2), sorted(l3))) 38 39 # (7)返回最大的元素 --> nlargest 40 l = [2, 3, 1, 4] 41 print heapq.nlargest(2, l) # 输出 [4, 3] 42 43 # (8)返回最小的元素 --> nsmallest 44 l = [2, 3, 1, 4] 45 print heapq.nsmallest(2, l) # 输出 [1, 2] 46 47 # (9)向堆中追加一个数据,再弹出堆头(弹出后堆不会发生翻转) --> heappushpop 48 l = [2, 3, 1, 4] 49 print heapq.heappushpop(l, -10) # 输出 -10 50 print l # 输出 [2, 3, 1, 4]
相关文章:
python中堆的用法
Python 堆(Headp) Python中堆是一种基于二叉树存储的数据结构。 主要应用场景: 对一个序列数据的操作基于排序的操作场景,例如序列数据基于最大值最小值进行的操作。 堆的数据结构: Python 中堆是一颗平衡二叉树&am…...
轮班管理新策略,提高效率与降低员工抱怨
良好轮班管理对企业关键,需提前计划、明确期望、保持灵活公平、加强沟通并利用轮班调度系统。ZohoPeople作为智能排班系统,提供轻松创建班次、自动更换、分配管理员、设置津贴及即时通知等功能,助力企业高效管理。 一、HR轮班管理的5大技巧 …...
spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容
**背景:**在开发测试过程中如果可以打印出配置文件的内容,方便确认配置是否准确;那么如何才可以打印出来呢; spring-cloud-alibaba-nacos-config 调整日志级别 logging:level:com.alibaba.cloud.nacos.configdata.NacosConfigD…...
数据结构:二叉树、堆
目录 一.树的概念 二、二叉树 1.二叉树的概念 2.特殊类型的二叉树 3.二叉树的性质 4.二叉树存储的结构 三、堆 1.堆的概念 2.堆的实现 Heap.h Heap.c 一.树的概念 注意,树的同一层中不能有关联,否侧就不是树了,就变成图了ÿ…...
hi3798mv100 linux 移植
# Linux开发环境搭建 ## uboot编译 1. 必须先安装gcc,要不然make 等命令无法使用 2. 配置arm 交叉编译链 # gcc sudo apt-get install gcc-9 gcc -v# 安装 Linaro gcc-arm-linux-gnueabihf,注意不是arm-linux-gnueabihf-gcc sudo apt-get install ar…...
Docker-Harbor概述及构建
文章目录 一、Docker Harbor概述1.Harbor的特性2.Harbor的构成 二、搭建本地私有仓库三、部署 Docker-Harbor 服务四、在其他客户端上传镜像五、维护管理Harbor 一、Docker Harbor概述 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅…...
部署项目最新教程
3.3安装mysql 运行代码: yum install mysql 运行代码: yum install mysql-server 中间还是一样要输入y然后回车 运行代码: yum install mysql-devel 好,经过上面三步,mysql安装成功,现在启动mysql…...
linux证明变量扩展在路径名扩展之前执行
题目:怎么设计一组命令来证明变量扩展在路径名扩展之前执行。 为了证明变量扩展在路径名扩展之前执行,可以通过编写一个简单的 shell 脚本来观察这两个过程的顺序。我们可以使用以下步骤进行设计: 步骤 1:准备环境 在你选择的 …...
CentOS 7.9安装MySQL
下载Linux版MySQL安装包 下载地址https://downloads.mysql.com/archives/community/ 下载解压后 安装,按照从上至下顺序,一条一条执行即可安装完毕。 进入到rpm所在目录rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm rpm -ivh mysql-comm…...
MacOS虚拟机安装Windows停滞在“让我们为你连接到网络”,如何解决?
1. 问题描述 MacOS在虚拟机安装win11过程中,停止在“让我们为你连接到网络”步骤,页面没有任何可以点击的按钮,进行下一步操作。 2. 解决方案(亲测有效) 到达该界面,按下ShiftF10(Windows&…...
黑马程序员Java笔记整理(day03)
1.switch 2.for与while对比 3.嵌套定义,输出的区别性 4.break与continue 5.随机数生成的两种方式 6.Random 7.随机验证码...
centos7更换阿里云镜像源操作步骤及命令
centos7更换阿里云镜像源 在CentOS 7上更换为阿里云的镜像源可以通过以下步骤进行: 备份当前的YUM源配置文件 sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.backup清理原有的YUM源配置文件 sudo rm -f /etc/yum.repos.d/*.repo下载阿里云的CentOS 7源配置文件 …...
冲刺大厂 | 一个线程调用两次start()方法会出现什么现象?
大家好,我是冰河~~ 今天给大家分享的面试题是:一个线程调用两次start()方法会出现什么现象?这道面试题是一道关于多线程的基础面试题,很多小伙伴对这个面试题不太了解,其实,如果你看过JDK中关于Thread类的…...
leaflet(一)初始化地图
Leaflet 与天地图结合使用,可以通过天地图提供的 API 获取地图瓦片,并在 Leaflet 地图上显示。 1. 安装依赖 首先,确保你已经安装了 Leaflet 和 Vue: npm install leaflet npm install vue-leaflet npm install leaflet.tilela…...
Unity开发Hololens项目
Unity打包Hololens设备 目录Visual Studio2019 / Visual Studio2022 远端部署设置Visual Studio2019 / Visual Studio2022 USB部署设置Hololens设备如何查找自身IPHololens设备门户Unity工程内的打包设置 目录 记录下自己做MR相关:Unity和HoloLens设备的历程。 Vi…...
立志最细,FreeRtos的中断管理(Interrupt Management)函数,详解!!!
前言:本文参考,韦东山老师开发文档,连接放在最后。 为什么需要中断管理函数? 在FreeRtos操作系统中,需要实时响应性,也就是随时随地必须保证正常多任务的运行,如果有中断发生,因为中…...
作业2-线性回归的Matlab代码实现
一、前言 相关配置:Matlab 2020a(版本的影响应该不大,.m代码基本都能运行,个人感觉就是Simulink对版本的要求高一些) 二、任务描述 基于近两节课的理论推导,用代码实现线性回归,并对预测结果进…...
用jQuery在canvas上绘制绝对定位的元素
在Web开发中,我们经常需要在canvas上精确定位和绘制元素。虽然canvas本身不支持DOM元素的定位,但我们可以借助jQuery来实现这一功能。本文将介绍如何使用jQuery在canvas上实现元素的绝对定位。 1. 基本思路 我们的基本思路是: 创建一个包含canvas的容器div将需要定位的元素放…...
Android中 tools:text 和 android:text区别
首先引入命名空间 <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"/androidx.constraintlayout.widget.ConstraintLayout> tools:te…...
Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)
0x01 产品简介 GutenKit 是一个WordPress的页面构建器,在 Gutenberg 设计您的下一个 WordPress 网站。借助 Gutenberg 的原生拖放界面、50+ WordPress 块、14+ 多功能模块和 500+ 模板,您可以在几分钟内创建专业、响应迅速的 Web 内容。 0x02 漏洞概述 Wordpress GutenKit…...
从相位差到厘米级精度:深入解析蓝牙6.0 CS中PBR公式的推导与验证
1. 蓝牙6.0 CS技术中的相位测距原理 蓝牙6.0引入的信道探测(CS)功能将定位精度提升到了厘米级,这主要得益于其采用的相位测距法(PBR)。想象一下,这就像用无线电波玩"激光测距",只不过我们用的是相位差而不是光脉冲。在实际操作中&a…...
数字电路设计终极指南:用Logisim-Evolution从零搭建你的第一个逻辑系统
数字电路设计终极指南:用Logisim-Evolution从零搭建你的第一个逻辑系统 【免费下载链接】logisim-evolution Digital logic design tool and simulator 项目地址: https://gitcode.com/gh_mirrors/lo/logisim-evolution 数字电路设计与仿真是电子工程和计算机…...
Python flask django框架的医疗问诊拿药系统
目录同行可拿货,招校园代理 ,本人源头供货商功能分析:基于Flask/Django的医疗问诊拿药系统核心模块划分技术实现要点数据安全与合规扩展性设计项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 …...
从ChatGPT到Sora:拆解Transformer架构演进,看MHA、MQA、GQA和KV Cache如何决定大模型推理速度
从ChatGPT到Sora:Transformer架构演进与推理加速实战 在生成式AI爆发的时代,Transformer架构已成为大模型的核心引擎。从ChatGPT的惊艳表现到Sora的视频生成突破,背后都离不开对注意力机制的持续优化。本文将深入剖析MHA、MQA、GQA等关键技术…...
电机控制-PMSM无感FOC控制(五)SVPWM——过调制区的谐波抑制策略
1. 过调制区的谐波问题从哪来? 第一次调试PMSM过调制区时,我被电机发出的尖锐噪音吓了一跳。示波器上原本光滑的正弦电流波形突然出现了明显的毛刺,THD(总谐波失真)直接从5%飙到15%。这种现象的本质,是传统…...
老程序员重归CSDN:AI时代的五重叩问与一封给未来的信
深夜,我重新登录了那个尘封已久的CSDN账号。上一次更新还是三年前,记录的是某个深夜排查分布式锁问题的碎片。如今,当AI能一键生成完整模块、自动修复基础Bug时,我却在思考一个更本质的问题:我们这些与代码相伴近二十年…...
微前端路由与导航:在micro-frontends中实现页面跳转的终极指南
微前端路由与导航:在micro-frontends中实现页面跳转的终极指南 【免费下载链接】micro-frontends extending the microservice paradigms to web development 项目地址: https://gitcode.com/gh_mirrors/mi/micro-frontends 微前端(micro-fronten…...
Free RTOS:任务状态,任务管理与调度理论
目录 1.任务状态 1.1 FreeRTOS的任务状态: 1.2 阻塞状态(Blocked) 1.3 暂停状态(Suspended) 原型如下: 1.4 就绪状态(Ready) 1.5 完整的状态转换图 1.6 代码 2.任务管理与调度理论 2.1 调度 2.2 FreeRTOS调度 STM32CubeMX FreeRTOS源码 代…...
5分钟搞定:用BLAST快速检测fastq测序数据污染(附完整物种比例分析脚本)
5分钟快速检测fastq测序数据污染的实战指南 在生物信息学分析中,测序数据质量直接影响后续分析结果的可靠性。fastq格式作为二代测序的通用数据载体,可能因实验操作、样本处理或测序仪交叉污染等因素引入非目标物种序列。传统污染检测方法往往需要复杂的…...
QT界面设计小技巧:用QListWidget+CheckBox打造可交互列表(避坑指南)
QT界面设计实战:QListWidget与CheckBox的高效交互方案 在桌面应用开发中,列表控件与复选框的组合堪称经典交互模式。这种设计不仅直观地呈现多项选择场景,还能有效提升用户操作效率。作为QT框架中的核心组件,QListWidget与QCheckB…...
