查找最大或最小的 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}]

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值