Python中列表的前n个最大值
怎样才能从一个给定的列表中找到前n个最大的值呢?如果n的值相对来说比较小,而这个列表的长度又很长,有没有比下面这种方法更有效的方式呢:
alist.sort()
return alist[0:n]
2 个回答
7
使用heapq
模块:
import heapq
return heapq.nlargest(n, l)
如果你只想找出相对较少的n
个元素,使用堆队列会比完全排序更有效率。如果n
比较大,使用sorted(l)[-n:]
会更有效。heapq.nlargest()
这个功能会检查这些情况,如果发现n
等于或大于列表的长度len(l)
,它就会改用sorted()
来处理。
需要注意的是,heapq
模块会直接修改原来的列表(会对列表调用heapq.heapify()
)。