找出最大与最小我们可以使用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 排序再切片取出
网友评论