小编典典

如何有效地获取python中列表的k个更大的元素

algorithm

解决这个问题的最有效,最优雅,最Python化的方法是什么?

给定一个由n个元素组成的列表(或集合或其他元素),我们希望获得k个最大的元素。(k<n/2我想您可以假设不会失一般性)例如,如果列表为:

l = [9,1,6,4,2,8,3,7,5]

n = 9,假设k =3。检索3个最大算法的最有效算法是什么?在这种情况下,我们应该获得[9,8,7],而没有特定的顺序。

谢谢!曼努埃尔


阅读 383

收藏
2020-07-28

共1个答案

小编典典

使用来自heapq模块的最大

from heapq import nlargest
lst = [9,1,6,4,2,8,3,7,5]
nlargest(3, lst) # Gives [9,8,7]

如果您想更改条件,也可以将键设置为最大。

from heapq import nlargest
tags = [ ("python", 30), ("ruby", 25), ("c++", 50), ("lisp", 20) ]
nlargest(2, tags, key=lambda e:e[1]) # Gives [ ("c++", 50), ("python", 30) ]
2020-07-28