我想在整数列表 lst 中创建一个包含前20个值的列表 maxValues 。
maxValues = []
for i in range(20):
maxValues.append(max(lst))
lst.remove(max(lst))
是否有更紧凑的代码来实现此任务甚至是内置函数?
答案 0 :(得分:12)
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:
后两个函数[
nlargest
和nsmallest
]对较小的n
值表现最佳。对于较大的值,使用sorted()
函数更有效。此外,在n==1
时,使用内置的min()
和max()
函数会更有效。
答案 1 :(得分:6)
sorted(lst)[-20:]
是我能想到的最短的。也可能更快。
(编辑:首先尝试找到min而不是max)