找到最大或最小的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可以自定义排序,排完后取最前或者最后的元素就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这个不错分享给大家,从扣上看到的,就转过来了 《电脑专业英语》 file [fail] n. 文件;v. 保存文...
    麦子先生R阅读 6,677评论 5 24
  • 1、线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,这种线性表只能在固定的...
    雾熏阅读 2,487评论 0 10
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,272评论 0 12
  • 该系列文章主要是记录下自己暑假这段时间的学习笔记,暑期也在实习,抽空学了很多,每个方面的知识我都会另起一篇博客去记...
    Yanci516阅读 12,359评论 6 19
  • 文/乔樹 三圣母最近诸事不顺。先是在蟠桃大会上被嫦娥抢尽风头,后来在天宫大厦又眼睁睁看着七仙女买走了她心仪已久的靴...
    乔樹阅读 2,358评论 0 3