获取给定列表的n个最高值的最佳方法是什么?如果我们处于与alist
的长度相比较小的n的情况下,是否有更有效的方法:
alist.sort()
return alist[0:n]
答案 0 :(得分:7)
使用heapq
module:
import heapq
return heapq.nlargest(n, l)
如果要查找的n
元素数量相对较少,则使用堆队列比完全排序更有效。如果n
更大,sorted(l)[-n:]
效率更高。 heapq.nlargest()
实施会测试这些条件,如果可以确定sorted()
等于或大于n
,则会切换为使用len(l)
。
请注意,heapq
模块将就地修改列表(在列表中调用heapq.heapify()
)。
答案 1 :(得分:0)
您的方法非常简洁,但可能效率最低。一种可能性是实现确定性选择算法(如解释here in text和here in video),然后将其调用为您想要的值。这将给你和整个O(n)操作,因为你正在谈论通过列表,我认为你不会得到显着更好。