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 个元素的主要内容,如果未能解决你的问题,请参考以下文章

python中使用heapq查看最大与最小的N个元素列表

heapq取列表最大或最小值元素

Python实用黑科技——找出最大/最小的n个元素

python之使用heapq()函数计算列表中数值大小

heapq模块

python模块之heapq