美文网首页
1-3 查找最大或最小的N个元素

1-3 查找最大或最小的N个元素

作者: 小龙虾0o0 | 来源:发表于2018-12-30 17:00 被阅读0次

找出最大与最小我们可以使用max或min函数,python中,提供了一个功能更强的查找模块——heapq


它可以返回从大到小或者从小到大的序列

代码如下:

import heapq

a = [1, 3, 5, 7, 2, 4, 5]
print(heapq.nlargest(4, a))
print(heapq.nsmallest(10, a))
>>> [7, 5, 5, 4]
>>> [1, 2, 3, 4, 5, 5, 7]

还有更为复杂的查找,需要传一个关键字参数

代码如下:

d = [
    {'name': 'aaa', 'age': 18},
    {'name': 'bbb', 'age': 22},
    {'name': 'ccc', 'age': 23},
    {'name': 'ddd', 'age': 15},
    {'name': 'eee', 'age': 16},
]

l = heapq.nlargest(3, d, key=lambda d:d['age'])
print(l)

>>> [{'age': 23, 'name': 'ccc'}, {'age': 22, 'name': 'bbb'}, {'age': 18, 'name': 'aaa'}]

heapq 采用了堆结构,所以时间复杂度较低。

然而
在N == 1时,显然使用 min 或 max 更快
在 N 接近 序列大小时,可以先 sort 排序再切片取出

相关文章

网友评论

      本文标题:1-3 查找最大或最小的N个元素

      本文链接:https://www.haomeiwen.com/subject/qdtulqtx.html