获得给定列表的 n 个最高值的最佳方法是什么?如果我们处于 n 与 的长度相比相当小的情况下alist
,是否有比以下更有效的方法:
alist.sort()
return alist[0:n]
使用heapq
模块:
import heapq
return heapq.nlargest(n, l)
如果您正在寻找相对较少数量的n
元素,则使用堆队列比完整排序更有效。如果n
更大,sorted(l)[-n:]
则效率更高。heapq.nlargest()
实现确实测试了这些条件,如果它可以确定等于或大于 ,将切换sorted()
到n
使用len(l)
。
请注意,该heapq
模块将就地修改列表(在heapq.heapify()
列表上调用)。
您的方法非常简洁,但可能不是最有效的。一种可能性是实现确定性选择算法(如本文中的此处和视频中的此处所述),然后将其调用为您想要的值。这将给你和 O(n) 整体操作,并且由于你正在谈论通过一个列表,我认为你不会能够变得更好。