Python heapq模块中heappush与heapify的使用详解

桃夭
桃夭
发布时间:2026-10-14| 3人浏览过
原创

本文详细讲解Python中创建堆的两种基本方法:heappush()和heapify()。通过具体代码实例展示如何向堆中插入元素并保持堆性质,以及如何在已有数据列表上高效构建堆。同时扩展介绍了最小堆与最大堆的定义、节点下沉操作及完全二叉树的存储特性,帮助开发者深入理解Python堆数据结构的实现原理。

1、说明

在Python中,构建堆结构主要依赖两种核心方法:heappush() 和 heapify()。

使用 heappush() 方法时,随着新元素的不断加入,堆的有序性质(即堆特性)会被自动维持。

若数据已经存在于内存列表中,采用 heapify() 方法可以更高效地重新排列元素以构建堆。

2、实例


import heapq
from heapq_showtree import show_tree
from heapq_heapdata import data
 
heap = []
print('random :', data)
print()
 
for n in data:
  print('add {:>3}:'.format(n))
  heapq.heappush(heap, n)
  show_tree(heap)
   
# output
# random : [19, 9, 4, 10, 11]
#
# add 19:
#
#         19
# ------------------------------------
#
# add  9:
#
#         9
#     19
# ------------------------------------
#
# add  4:
#
#         4
#     19        9
# ------------------------------------
#
# add 10:
#
#         4
#     10        9
#   19
# ------------------------------------
#
# add 11:
#
#         4
#     10        9
#   19    11
# ------------------------------------

知识点扩展:

创建最大(小)堆

二叉堆在物理上表现为完全二叉树,其存储方式并非链式结构,而是采用顺序存储(通常基于数组)。

堆的基本操作包括插入和删除:插入时,新元素作为叶子节点并向上调整位置;删除时,通常移除堆顶元素后,剩余元素向下调整。

堆的构建过程涉及非叶子节点的向下调整,具体是从最后一个非叶子节点开始执行下沉操作。

最小堆:

在最小堆中,任意父节点的值均小于或等于其左右子节点的值。

构建最小堆的过程为:若非叶子节点的值大于其子节点,则将该节点向下交换(下沉)。

最大堆:

在最大堆中,任意父节点的值均大于或等于其左右子节点的值。

构建最大堆的过程为:若非叶子节点的值小于其子节点,则将该节点向下交换(下沉)。

到此这篇关于python创建堆的方法实例讲解的文章就介绍到这了,更多相关python创建堆的方法有哪些内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。