2

获得给定列表的 n 个最高值的最佳方法是什么?如果我们处于 n 与 的长度相比相当小的情况下alist,是否有比以下更有效的方法:

alist.sort()
return alist[0:n]
4

2 回答 2

7

使用heapq模块

import heapq

return heapq.nlargest(n, l)        

如果您正在寻找相对较少数量的n元素,则使用堆队列比完整排序更有效。如果n更大,sorted(l)[-n:]则效率更高。heapq.nlargest()实现确实测试了这些条件,如果它可以确定等于或大于 ,将切换sorted()n使用len(l)

请注意,该heapq模块将就地修改列表(在heapq.heapify()列表上调用)。

于 2013-02-27T15:51:05.690 回答
0

您的方法非常简洁,但可能不是最有效的。一种可能性是实现确定性选择算法(如本文中的此处和视频中的此处所述),然后将其调用为您想要的值。这将给你和 O(n) 整体操作,并且由于你正在谈论通过一个列表,我认为你不会能够变得更好

于 2013-02-27T15:59:32.577 回答