[英]Filter max 20 values from a list of integers
我想創建一個列表maxValues ,其中包含整數列表中的前 20 個值lst 。
maxValues = []
for i in range(20):
maxValues.append(max(lst))
lst.remove(max(lst))
是否有更緊湊的代碼來實現此任務甚至內置功能?
maxvalues = heapq.nlargest(20, lst)
從文檔:
heapq.nlargest(n, iterable, key=None)
返回一個列表,其中包含來自iterable定義的數據集中的n 個最大元素。 key ,如果提供,指定一個參數的函數,用於從iterable 中的每個元素提取比較鍵(例如,
key=str.lower
)。 相當於:sorted(iterable, key=key, reverse=True)[:n]
。
或者以同樣的方式使用heapq.nsmallest()
如果你想要最小的。
來自文檔的重要說明:
后兩個函數 [
nlargest()
和nsmallest()
] 對於較小的n值表現最佳。 對於較大的值,使用sorted()
函數更有效。 此外,當n==1
,使用內置的min()
和max()
函數效率更高。 如果需要重復使用這些函數,請考慮將可迭代對象轉換為實際的堆。
sorted(lst)[-20:]
是我能想到的最短的。 也可能更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.