簡體   English   中英

從整數列表中過濾最多 20 個值

[英]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))

是否有更緊湊的代碼來實現此任務甚至內置功能?

heapq.nlargest()

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM