n Python中列表的最高值

liz*_*zie 2 python sorting

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

alist.sort()
return alist[0:n]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

使用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()调用).