python使用heapq快速查找最大或最小的 N 个元素
Posted Data+Science+Insight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python使用heapq快速查找最大或最小的 N 个元素相关的知识,希望对你有一定的参考价值。
python使用heapq快速查找最大或最小的 N 个元素
heapq实现了一个适合与Python的列表一起使用的最小堆排序算法。
堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆。( heapq库中的堆默认是最小堆)
最大堆,树种各个父节点的值总是大于或等于任何一个子节点的值。
最小堆,树种各个父节点的值总是小于或等于任何一个子节点的值。
我们一般使用二叉堆来实现优先级队列,它的内部调整算法复杂度为logN。
堆是一个二叉树,其中最小堆每个父节点的值都小于或等于其所有子节点的值。
整个最小堆的最小元素总是位于二叉树的根节点。
python的heapq模块提供了对堆的支持。 heapq堆数据结构最重要的特征是heap[0]永远是最小的元素
# 从一个集合中获得最大或者最小的 N 个元素列表
#heapq 模块有两个函数:nlargest()
和 nsmallest()
可以完美解决这个问题。
import heapq
nums = [100,300,-20,1,3,5,9,1000,300,1000,-40,-90]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
[1000, 1000, 300] [-90, -40, -20]
# 不仅仅是list,对于字典等复杂数据结构依旧游刃有余;
# 使用lambda函数添加附加的条件就可以;
# heapq 模块有两个函数
以上是关于python使用heapq快速查找最大或最小的 N 个元素的主要内容,如果未能解决你的问题,请参考以下文章