获得给定列表的n个最高值的最佳方法是什么?如果我们处于与长度相比n相当小的情况下alist,是否有更高效的东西:
alist.sort()
return alist[0:n]
Run Code Online (Sandbox Code Playgroud)
使用heapq模块:
import heapq
return heapq.nlargest(n, l)
Run Code Online (Sandbox Code Playgroud)
如果要查找的n元素数量相对较少,则使用堆队列比完全排序更有效.如果n更大,sorted(l)[-n:]效率更高.该heapq.nlargest()实现确实测试了这些条件,并且sorted()如果它可以确定n等于或大于,则将切换到使用len(l).
请注意,heapq模块将就地修改列表(在列表中heapq.heapify()调用).