当前位置:   article > 正文

python的nlargest_从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()

python nlargest

从集合中查找最值得方法有很多,常用的方法有max(),min(),nlargest(),nsmallest()等。

一、max()和min()

1.1 入门用法

直接使用max(),min(),返回可迭代对象中的最大值和最小值。

1 a = [1, 5, 2, 1, 9, 1, 5, 10]2 print(max(a))3 print(min(a))4

5 #运行结果如下

6 10

7 1

1.2 进阶用法

我们以max()为例来分析。max(interable,key=none),即max()函数中第一个参数需要提供一个可迭代的查找对象。key值为空时,仅返回一个最大值。当key值非空时,max()函数就以key为标准来判断,通常可结合匿名函数使用。

1 a = [14, -57, 21, 10, 19, 12, 25, 10]2 print(max(a, key=lambda x:str(x))) #以对应的字符串做判断标准

3 print(max(a, key=lambda x:len(str(x)))) #以对应的字符串的长度做判断标准

4 print(max(a, key=lambda x:abs(x))) #以绝对值大小做判断标准

5

6 #运行结果如下

7 25

8 -57

9 -57

min()的用法与max()同理,不再举例

1.3 高阶用法

高阶用法可与zip()结合,查找字典中value最大的item项。比如,有一组商品,商品名和价格的映射关系体现在字典中,如下:

prices={"装载机":768,"推土机":248,"平地机":131,"橄榄车":375,"反铲":636}

这里需要注意的是在进行字典操作时,默认是对key进行操作,而不是value(其中一个很重要的原因是key具有唯一性,而value没有)。所以,我们要使用zip方法将字典的键值反转过来,在进行排序查找。

min_price = min(zip(prices.values(),prices.keys()))

print(min_price)

max_price = max(zip(prices.values(),prices.keys()))

print(max_price)

#运行结果如下

(131, '平地机')

(768, '装载机')

注意:

zip()是创建了一个迭代器,它只能使用一次,所以,如下方法是会报错的

price_and_name =zip(prices.values(),prices.keys())print(max(price_and_name))print(min(price_and_name))

二、nlargest()和nsmallest()

前面提到的max()和min()只能返回一项值,而heapq模块下的nlargest()和nsmallest(),可以返回最大或最小的多个值。

1 importheapq2

3 nums = [12,548,31,4,546,58,46,1,8,42,3,68]4

5 print(heapq.nlargest(3,nums))6 print(heapq.nsmallest(4,nums))7

8

9 #运行结果如下

10 [548, 546, 68]11 [1, 3, 4, 8]

可以看到nlargest()和nsmallest()可以返回指定数目的最值。与max()和min()一样,nlargest()和nsmallest()也可以加上key作为判断条件,从而用于更复杂的数据结构。

1 importheapq2

3 students =[4 {"name":"张三", "age":19, "tuition":6000},5 {"name":"李四", "age":23, "tuition":4500},6 {"name":"王五", "age":18, "tuition":8000},7 {"name":"赵六", "age":29, "tuition":7000},8 {"name":"钱七", "age":27, "tuition":5500}9 ]10

11 print(heapq.nlargest(3,students,key=lambda x:x["tuition"]))12 print(heapq.nsmallest(3,students,key=lambda y:y["age"]))13

14

15 #运行结果如下:

16 [{'name': '王五', 'age': 18, 'tuition': 8000}, {'name': '赵六', 'age': 29, 'tuition': 7000}, {'name': '张三', 'age': 19, 'tuition': 6000}]17 [{'name': '王五', 'age': 18, 'tuition': 8000}, {'name': '张三', 'age': 19, 'tuition': 6000}, {'name': '李四', 'age': 23, 'tuition': 4500}]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/161898
推荐阅读
相关标签
  

闽ICP备14008679号