我想创建一个列表 maxValues, 其中包含整数 lst 列表中的前20个值。
maxValues = [] for i in range(20): maxValues.append(max(lst)) lst.remove(max(lst))
是否有更紧凑的代码可以完成此任务甚至内置功能?
有heapq.nlargest():
heapq.nlargest()
maxvalues = heapq.nlargest(20, lst)
从文档中:
heapq.nlargest(n, iterable, key=None) 返回由定义的数据集中n个最大元素的列表iterable。key(如果提供)指定一个参数的函数,该函数用于从iterable中的每个元素中提取比较键:key=str.lower等效于:sorted(iterable, key=key, reverse=True)[:n]
heapq.nlargest(n, iterable, key=None)
返回由定义的数据集中n个最大元素的列表iterable。key(如果提供)指定一个参数的函数,该函数用于从iterable中的每个元素中提取比较键:key=str.lower等效于:sorted(iterable, key=key, reverse=True)[:n]
iterable
key
key=str.lower
sorted(iterable, key=key, reverse=True)[:n]
或以相同的方式使用(heapq.nsmallest()如果您想要最小的)。
heapq.nsmallest()
* doc *重要提示 :
后两个函数[nlargest和nsmallest]对于的较小值表现最佳n。对于较大的值,使用该sorted()功能效率更高。另外,当时n==1,使用内置函数min()和max()功能会更有效。
nlargest
nsmallest
n
sorted()
n==1
min()
max()