python创建和使用堆的方法

Python通过heapq模块实现最小堆,可对列表进行堆化、插入、弹出等操作,支持高效获取极值及模拟最大堆。

python创建和使用堆的方法

Python 中没有专门的“堆”类型,但可以通过内置模块 heapq 来创建和使用堆。heapq 模块提供了对列表进行堆操作的函数,实现的是最小堆(min-heap)结构。

1. 创建堆

堆在 Python 中本质上是一个普通列表,通过 heapq 提供的函数维护堆的性质。

使用 heapq.heapify() 可将一个无序列表转换为最小堆:

原地修改列表,不返回新对象时间复杂度为 O(n)

立即学习“Python免费学习笔记(深入)”;

import heapq

data = [3, 1, 4, 1, 5, 9, 2, 6]heapq.heapify(data)print(data) # 输出: [1, 1, 2, 3, 5, 9, 4, 6](满足最小堆结构)

2. 插入元素(入堆)

使用 heapq.heappush(heap, item) 向堆中添加元素:

保持堆结构不变时间复杂度为 O(log n)

立即学习“Python免费学习笔记(深入)”;

heap = []heapq.heappush(heap, 3)heapq.heappush(heap, 1)heapq.heappush(heap, 4)print(heap)  # 输出: [1, 3, 4]

3. 弹出最小元素(出堆)

使用 heapq.heappop(heap) 弹出并返回堆顶(最小值):

弹出后自动调整堆结构常用于获取当前最小元素

立即学习“Python免费学习笔记(深入)”;

min_val = heapq.heappop(heap)print(min_val)  # 输出: 1print(heap)     # 输出: [3, 4]

4. 其他常用操作

heapq 还提供一些实用函数:

heappushpop(heap, item):先入堆再弹出最小值,效率高于分开调用heapreplace(heap, item):先弹出最小值,再入堆,堆大小不变nlargest(n, iterable):获取最大 n 个元素nsmallest(n, iterable):获取最小 n 个元素

立即学习“Python免费学习笔记(深入)”;

# 示例:获取最小的两个数nums = [5, 1, 8, 3, 9]two_smallest = heapq.nsmallest(2, nums)print(two_smallest)  # 输出: [1, 3]

若需要最大堆,可通过取负值模拟:

max_heap = []heapq.heappush(max_heap, -10)heapq.heappush(max_heap, -20)largest = -heapq.heappop(max_heap)print(largest)  # 输出: 20

基本上就这些。heapq 简单高效,适合实现优先队列、求 TopK、合并多路有序序列等场景。

以上就是python创建和使用堆的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1380958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 22:33:12
下一篇 2025年12月14日 22:33:19

相关推荐

  • Python爬虫如何设置请求头_Python爬虫设置请求头模拟浏览器访问方法

    设置请求头可模拟浏览器行为,避免被识别为爬虫。通过requests的headers参数添加User-Agent、Accept等字段,使服务器误认为请求来自真实用户,提高爬取成功率,并可通过随机切换User-Agent增强隐蔽性。 在使用Python编写爬虫时,很多网站会通过检查请求头(Request…

    好文分享 2025年12月14日
    000
  • Python多线程如何实现工作窃取 Python多线程负载均衡策略

    Python多线程受GIL限制无法真正并行,但可通过模拟工作窃取提升效率。1. 工作窃取指线程用双端队列存任务,空闲时从其他线程尾部窃取任务执行,减少空闲。2. queue.Queue可实现中心化任务分发,多线程从中取任务,达到负载均衡。3. 用collections.deque为每个线程配本地队列…

    2025年12月14日
    000
  • 如何在服务器上搭建 Python 环境

    首先确认服务器系统类型和管理员权限,然后安装Python 3及pip工具;Ubuntu/Debian使用apt命令,CentOS/RHEL使用yum或dnf;接着安装python3-venv创建虚拟环境,通过python3 -m venv myproject_env和source myproject…

    2025年12月14日
    000
  • python中PyMySQL有什么用

    PyMySQL是Python操作MySQL的轻量库,支持连接数据库、执行SQL、参数化查询防注入、事务管理,并需手动关闭游标和连接。 PyMySQL 是 Python 中用于连接和操作 MySQL 数据库的一个纯 Python 实现的客户端库。它的主要作用是让 Python 程序能够与 MySQL …

    2025年12月14日
    000
  • Python 项目如何实现一键安装依赖

    使用requirements.txt可实现Python项目依赖的一键安装,首先通过pip freeze > requirements.txt导出依赖,建议仅保留直接依赖并规范版本控制符如==、>=、~=,然后用户可通过pip install -r requirements.txt在虚拟环…

    2025年12月14日
    000
  • Python 异常继承体系结构详解

    答案:Python异常体系以BaseException为根,Exception继承其并作为用户异常父类,应避免捕获BaseException以防屏蔽系统退出异常。常见异常如ValueError、KeyError等均继承自Exception,自定义异常也应继承Exception而非BaseExcept…

    2025年12月14日
    000
  • Python 文件写入时的换行控制

    答案:Python文件写入时需注意换行符的跨平台差异,Windows用rn,Linux和macOS用n;默认文本模式会自动转换n为系统换行符,可通过open()的newline=”禁用自动转换以保持原样;显式写入rn或n可手动控制换行;print()函数写入文件时默认添加换行,可用end…

    2025年12月14日
    000
  • Python爬虫如何抓取问答社区内容_Python爬虫获取问答平台问题和答案的方法

    答案:抓取问答社区内容需分析网站结构,使用requests或Selenium获取数据,结合BeautifulSoup解析HTML,应对动态加载与反爬机制,遵守法律与平台规则,灵活调整方案以有效采集数据。 抓取问答社区内容是Python爬虫常见的应用场景之一,比如知乎、百度知道、Quora等平台都包含…

    2025年12月14日
    000
  • Python 使用 json 模块存储与读取数据

    JSON是一种轻量级数据交换格式,Python通过json模块实现对象与字符串互转;使用json.dump()可将字典、列表等写入文件,配合ensure_ascii=False和indent=4支持中文及格式美化;用json.load()从文件读取并还原为Python对象;仅支持基本类型,datet…

    2025年12月14日
    000
  • Python代码如何操作MongoDB Python代码连接NoSQL数据库的实践

    答案:使用pymongo操作MongoDB需先安装库并建立连接,通过MongoClient管理连接池以提升性能,合理配置maxPoolSize、minPoolSize和maxIdleTimeMS参数;执行CRUD操作时应结合try-except机制捕获ConnectionFailure、Operat…

    2025年12月14日
    000
  • Python中deque的操作整理

    Python中的deque是collections模块提供的高效双端队列,适用于两端频繁添加和删除的场景。相比列表,其头部操作时间复杂度为O(1)。通过from collections import deque创建,可初始化为空或从可迭代对象构建,并支持设置最大长度。d.append(x)和d.ap…

    2025年12月14日
    000
  • 初学者该选择哪个 Python 版本入门

    直接选择Python 3.10及以上版本最合适,因其性能更强、语法更现代、错误提示更清晰;Python 2已停止维护,资源不兼容且存在安全隐患;推荐安装python.org提供的最新稳定版如Python 3.12,并通过python –version验证版本。 对于初学者来说,选择合适的…

    2025年12月14日
    000
  • Python官网如何参与Python文档改进_Python官网文档项目贡献流程

    首先注册GitHub账号并配置Git与Python环境,然后Fork并克隆Python官方文档仓库,设置Sphinx构建环境以预览修改,接着从Issues中选择标记为type-bug或difficulty-easy的任务创建新分支进行编辑,使用reStructuredText格式修改.rst文件并本…

    2025年12月14日
    000
  • Python 临时日志文件的清理机制

    Python通过logging.handlers实现日志轮转,结合系统策略与上下文管理实现临时日志自动清理,需根据场景选择合适策略避免磁盘占用。 Python 临时日志文件的清理机制主要依赖于开发者的设计和系统环境的配合。虽然 Python 自身不会自动清理日志文件,但可以通过合理使用内置模块和外部…

    2025年12月14日
    000
  • Python 环境变量配置详解

    首先找到Python安装路径,然后将Python和Scripts目录添加到系统Path环境变量(Windows)或在shell配置文件中添加bin路径(macOS/Linux),最后通过python –version验证配置是否成功。 Python 环境变量配置是确保 Python 解释…

    2025年12月14日
    000
  • 企业内部 Python 环境管理经验分享

    企业Python环境管理方案确保一致性与安全性,通过统一Python版本、虚拟环境隔离、pip-tools依赖锁定、私有PyPI仓库发布及Docker容器化部署,实现开发到生产的全流程标准化与自动化。 企业在使用 Python 进行开发时,环境管理是一个容易被忽视但极其关键的环节。混乱的依赖关系、版…

    2025年12月14日
    000
  • 临时设置Python环境变量怎么做_Python环境变量临时配置方法与技巧

    使用命令行、os.environ或python-dotenv可临时设置环境变量。1. 命令行方式:Linux/macOS用export VAR=value && python script.py,Windows cmd用set VAR=value && python …

    2025年12月14日
    000
  • Python3官网主页地址如何查找_Python3主页地址查找方法与实用技巧

    Python3官网主页地址是https://www.python.org/,可通过浏览器直接输入域名、搜索引擎检索、添加书签或手机访问等方式进入,官网提供下载、文档、社区和成功案例等核心资源,并支持搜索、智能推荐、快速通道和PyPI跳转等功能以便高效使用。 Python3官网主页地址如何查找?这是不…

    2025年12月14日
    000
  • Windows 上 pip 安装库报错如何处理

    权限不足时使用–user参数或管理员身份运行;2. pip过旧则升级;3. 网络问题换国内镜像源;4. 缺编译工具需安装C++构建工具;5. 路径含中文应重装至英文路径;6. 多环境混淆时用python -m pip确保正确环境。 在 Windows 上使用 pip 安装 Python …

    2025年12月14日
    000
  • Python 异常与循环控制的结合使用

    在循环中捕获异常可提升容错性,如处理无效输入时跳过错误继续执行;2. 异常可触发重试或退出,如连接失败时循环重试直至达到上限;3. 结合 else 和 finally 可实现成功逻辑与资源清理的精细控制;4. 需避免过度捕获、沉默异常和逻辑错误,确保代码健壮性。 在 Python 编程中,异常处理和…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信