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

你可能感兴趣的:(找到最大或最小的N个元素)