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

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

怎样从一个集合中获得最大或者最小的 N 个元素列表?对于熟悉python的人来说,解决这个问题的方法十分简单。
即使用heapq模块。
heapq 模块有两个函数:nlargest() 和 nsmallest() 可以完美解决这个问题。

import heapq
import random

num = [random.randint(10, 1000) for i in range(10)]
print(num)
print(heapq.nlargest(3, num))
print(heapq.nsmallest(3, num))

测试输出如下:

[726, 180, 357, 781, 209, 177, 926, 666, 86, 254]
[926, 781, 726]
[86, 177, 180]

这样就可以得出一个列表中最大和最小的三个数。
当然他的应用不止于此,还可以与lambda函数结合使用,用于处理更复杂的数据结构。

import heapq
# 用于美化输出字典
import pprint


test_dict = [
    {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'APPLE', 'shares': 50, 'price': 543.22},
    {'name': 'DELL', 'shares': 200, 'price': 21.09},
    {'name': "GOOGLE', 'shares': 35, 'price': 31.75},
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    {'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, test_dict , key=lambda s: s['price'])
expensive = heapq.nlargest(3, test_dict , key=lambda s: s["price"])

pprint.pprint(cheap)
pprint.pprint(expensive)

得到输出结果如下:

[{'name': 'YHOO', 'price': 16.35, 'shares': 45},
 {'name': 'DELL', 'price': 21.09, 'shares': 200},
 {'name': 'GOOGLE', 'price': 31.75, 'shares': 35}]
[{'name': 'APPLE', 'price': 543.22, 'shares': 50},
 {'name': 'ACME', 'price': 115.65, 'shares': 75},
 {'name': 'IBM', 'price': 91.1, 'shares': 100}]

这样就得到了列表中价格最小和价格最大的三个字典元素。

你可能感兴趣的:(python)