从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()
从集合中查找最值得方法有很多,常用的方法有max(),min(),nlargest(),nsmallest()等。
一、max()和min()
1.1 入门用法
直接使用max(),min(),返回可迭代对象中的最大值和最小值。
a = [1, 5, 2, 1, 9, 1, 5, 10]
print(max(a))
print(min(a)) #运行结果如下
10
1
1.2 进阶用法
我们以max()为例来分析。max(interable,key=none),即max()函数中第一个参数需要提供一个可迭代的查找对象。key值为空时,仅返回一个最大值。当key值非空时,max()函数就以key为标准来判断,通常可结合匿名函数使用。
a = [14, -57, 21, 10, 19, 12, 25, 10]
print(max(a, key=lambda x:str(x))) #以对应的字符串做判断标准
print(max(a, key=lambda x:len(str(x)))) #以对应的字符串的长度做判断标准
print(max(a, key=lambda x:abs(x))) #以绝对值大小做判断标准 #运行结果如下
25
-57
-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(),可以返回最大或最小的多个值。
import heapq nums = [12,548,31,4,546,58,46,1,8,42,3,68] print(heapq.nlargest(3,nums))
print(heapq.nsmallest(4,nums)) #运行结果如下
[548, 546, 68]
[1, 3, 4, 8]
可以看到nlargest()和nsmallest()可以返回指定数目的最值。与max()和min()一样,nlargest()和nsmallest()也可以加上key作为判断条件,从而用于更复杂的数据结构。
import heapq students = [
{"name":"张三", "age":19, "tuition":6000},
{"name":"李四", "age":23, "tuition":4500},
{"name":"王五", "age":18, "tuition":8000},
{"name":"赵六", "age":29, "tuition":7000},
{"name":"钱七", "age":27, "tuition":5500}
] print(heapq.nlargest(3,students,key=lambda x:x["tuition"]))
print(heapq.nsmallest(3,students,key=lambda y:y["age"])) #运行结果如下:
[{'name': '王五', 'age': 18, 'tuition': 8000}, {'name': '赵六', 'age': 29, 'tuition': 7000}, {'name': '张三', 'age': 19, 'tuition': 6000}]
[{'name': '王五', 'age': 18, 'tuition': 8000}, {'name': '张三', 'age': 19, 'tuition': 6000}, {'name': '李四', 'age': 23, 'tuition': 4500}]
从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()的更多相关文章
- 【转载】C#中List集合中Last和LastOrDefault方法的差别
在C#的List集合操作中,Last方法和LastOrDefault方法都会用来查找集合中最后一个符合条件的元素对象,但Last和LastOrDefault方法还是有差别的,建议使用LastOrDef ...
- Map集合中value()方法与keySet()、entrySet()区别
http://blog.csdn.net/liu826710/article/details/9001254 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, ...
- Map集合中value()方法与keySet()、entrySet()区别 《转》
在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet(): 将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键 ...
- 从一个集合中查找最大最小的N个元素——Python heapq 堆数据结构
Top N问题在搜索引擎.推荐系统领域应用很广, 如果用我们较为常见的语言,如C.C++.Java等,代码量至少也得五行,但是用Python的话,只用一个函数就能搞定,只需引入heapq(堆队列)这个 ...
- 遍历Collection集合中的6种方法:
下面的代码演示了遍历Collection集合的6种方法,注意Collection集合的遍历远不止于增强for循环,和迭代器两种. 代码如下: package com.qls.traverse; imp ...
- Javasrcipt中从一个url或者从一个字符串中获取参数值得方法
从url中获取参数值是che程序开发过程中的常用需求,偶然得闲,便抽空研究了一下javasrcipt下,获取参数的办法(JAVA中也类似). 首先看url的规范: URL组成:protocol :// ...
- 用Java集合中的Collections.sort方法对list排序的两种方法
用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- Map集合中的一些具体方法的体现
package com.java.b.map.www; import java.util.Collection;import java.util.HashMap;import java.util.It ...
- 深入浅出:了解for循环中保留i值得方法
一.保留i值 通常情况下,因为一些效果我们需要获取到for循环中的i的值,但是往往拿到的都是最后一个i的值.下面介绍几种方法可以获取到i的值 1.自定义属性: arr[i].index = i; 以 ...
随机推荐
- vue每次修改刷新当前子组件
刚入门vue,发现很多坑,对很多框架兼容性不太友好,比如layui等 每次删除相关信息,更新相关信息,不会主动刷新当前页面内容,只能手动刷新 第一步,我们在跟组件理由设置一个参数,用来判断是否需要刷新 ...
- 单片机课程设计——课程设计之四位加法计算器(2)(C代码)
#include<reg52.h> typedef unsigned char uint8; typedef unsigned int uint16; sbit rw=P2^5; sbit ...
- 利用EventHandler系统委托,触发Event
最近一直在研究委托与事件,下面是我的个人理解 NOTE:参考了张子阳的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archi ...
- python3 里安装cv2
电脑上同时有python2 和python3,python2 里有cv2,Python3里没有. 用pip3 install opencv-python 安装,提示: You are using pi ...
- bootstrap学习1
1.form-control -宽度变成了100% -设置了一个浅灰色(#ccc)的边框 -具有4px的圆角 -设置阴影效果,并且元素得到焦点之时,阴影和边框效果会有所变化 -设置了placehold ...
- 修改系统和MySQL时区
修改时间时区比想象中要简单: 各版本系统通用的方法 # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # cp /usr/share/zone ...
- Linux 总线、设备、驱动模型 与 设备树
1.总线.设备.驱动模型 本着高内聚.低耦合的原则,Linux 把设备驱动模型分为了总线.设备和驱动三个实体,这三个实体在内核里的职责分别如下: 设备和驱动向总线进行注册,总线负责把设备和对应的驱动绑 ...
- mysql的SQL集锦
1. SQL内顺号 SELECT (@num := @num + 1) as index, item FROM tbl, (select @num := 0) dmy; 2. 空
- 微信小程序问题---数据传输长度为 1275870 已经超过最大长度 1048576
开发微信小程序时,遇到数据传输长度为 1095538 已经超过最大长度 1048576的问题. 这是setData时操作数据过大导致,一般出现在请求返回数据过大,我们又将这个数据一次性用setData ...
- vue环境项目启动后因为eslint语法限制报错
报错太多,截取了一部分. 解决方法找到项目根目录的build 找到webpack.base.conf.js 打开js文件找到下图的位置 再重新启动项目就好了