找到最大或最小的N個元素

本系列來自python cookbook

思路

可以用最大(最小)堆。假設現在要找N個最大的元素,則首先把前N個元素入堆,并形成最小堆(堆頂元素為最小元素),下面每次有新元素來都和堆頂元素比較,如果小于等于堆頂元素則拋棄,否則刪除堆頂元素并將新元素入堆,并維持堆序。如此下去直到遍歷所有元素。

heapq模塊

heapq模塊中的nlargest()和nsmallest()兩個函數正好可以實現我們的需求

import heapq
users = [{'name': 'u2', 'age': 18},
         {'name': 'coldplay', 'age': 19},
         {'name': 'pink floyd', 'age': 25},
         {'name': 'the door', 'age': 15},
         {'name': 'eminem', 'age':40},
         {'name': '2pac', 'age':50},
         {'name': 'armstrong', 'age':60},
         {'name': 'swift', 'age':25}
        ]

old5 = heapq.nlargest(5, users, key=lambda s : s['age'])
young5 = heapq.nsmallest(5, users, key=lambda s : s['age'])

print old5
print young5

別的方法

用operator.itemgetter可以自定義排序,排完后取最前或者最后的元素就可以了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 這個不錯分享給大家,從扣上看到的,就轉過來了 《電腦專業(yè)英語》 file [fail] n. 文件;v. 保存文...
    麥子先生R閱讀 7,130評論 5 24
  • 1、線性表、棧和隊列等數據結構所表達和處理的數據以線性結構為組織形式。棧是一種特殊的線性表,這種線性表只能在固定的...
    霧熏閱讀 2,548評論 0 10
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,392評論 0 12
  • 該系列文章主要是記錄下自己暑假這段時間的學習筆記,暑期也在實習,抽空學了很多,每個方面的知識我都會另起一篇博客去記...
    Yanci516閱讀 12,691評論 6 19
  • 文/喬樹 三圣母最近諸事不順。先是在蟠桃大會上被嫦娥搶盡風頭,后來在天宮大廈又眼睜睜看著七仙女買走了她心儀已久的靴...
    喬樹閱讀 2,486評論 0 3

友情鏈接更多精彩內容