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

xra*_*alf 5 python list max

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

maxValues = []
for i in range(20):
  maxValues.append(max(lst))
  lst.remove(max(lst))
Run Code Online (Sandbox Code Playgroud)

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

Rik*_*ggi 12

heapq.nlargest():

maxvalues = heapq.nlargest(20, lst)
Run Code Online (Sandbox Code Playgroud)

来自doc:

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

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

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

来自doc的重要说明:

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


Rém*_*émi 8

sorted(lst)[-20:]
Run Code Online (Sandbox Code Playgroud)

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

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