从整数列表中筛选最多20个值

时间:2012-03-18 09:34:29

标签: python list max

我想在整数列表 lst 中创建一个包含前20个值的列表 maxValues

maxValues = []
for i in range(20):
  maxValues.append(max(lst))
  lst.remove(max(lst))

是否有更紧凑的代码来实现此任务甚至是内置函数?

2 个答案:

答案 0 :(得分:12)

heapq.nlargest()

maxvalues = heapq.nlargest(20, lst)

来自doc:

  

heapq.nlargest(n, iterable, key=None)

     
    

返回一个列表,其中包含iterable定义的数据集中的n个最大元素。 key,如果提供,则指定一个参数的函数,该函数用于从iterable中的每个元素中提取比较键:key=str.lower相当于:sorted(iterable, key=key, reverse=True)[:n]

  

或者以同样的方式使用heapq.nsmallest(),如果你想要最小的。

重要提示 from the doc

  
    

后两个函数[nlargestnsmallest]对较小的n值表现最佳。对于较大的值,使用sorted()函数更有效。此外,在n==1时,使用内置的min()max()函数会更有效。

  

答案 1 :(得分:6)

sorted(lst)[-20:]

是我能想到的最短的。也可能更快。

(编辑:首先尝试找到min而不是max)