n Python中列表的最高值

时间:2013-02-27 15:44:46

标签: python sorting

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

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

2 个答案:

答案 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 texthere in video),然后将其调用为您想要的值。这将给你和整个O(n)操作,因为你正在谈论通过列表,我认为你不会得到显着更好。