美文网首页
找到最大或最小的N个元素

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

作者: bigtom | 来源:发表于2016-09-19 08:34 被阅读29次

    本系列来自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个元素

          本文链接:https://www.haomeiwen.com/subject/uyggettx.html