开发者社区> auqbllxiu> 正文

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>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python编程:heapq模块堆排序
堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。 整个堆的最小元素总是位于二叉树的根节点。 python的heapq模块提供了对堆的支持。 堆数据结构最重要的特征是heap[0]永远是最小的元素
19 0
【408数据结构与算法】—归并排序(二十二)
基本思想:将两个或两个以上的有序子序列归并为一个有序的序列。
12 0
Python快速排序板子 分而治之
Python快速排序板子 分而治之
22 0
Python数据结构与算法(16)---快速排序
Python数据结构与算法(16)---快速排序
32 0
Python数据结构与算法(17)---归并排序
Python数据结构与算法(17)---归并排序
24 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python第五讲——关于爬虫如何做js逆向的思路
立即下载
给运维工程师的Python实战课
立即下载
Python 脚本速查手册
立即下载