使用 max函数求列表的最大值
num = [10, 11, 12]
print(max(num, key=lambda i: i * i)) # 12
分析:
1) 先取10,以10为参传入匿名函数作为i,经i * i处理得100。
2) 再取11,以11为参传入匿名函数作为i,经i * i处理得121。
3) 最后取12,以12为参传入匿名函数作为i,经i * i处理得144。
4) 集中比较100,121,144, 得144最大,返回144对应的参数i,即12。
5) 最后返回为12。
使用 max函数求字典的最大值
原理:默认情况下,dict迭代的是key。如果想要迭代value,可以用for value in dic.values()
max函数:
第一个参数是可迭代内容,这里dic默认迭代key
第二个参数是一个函数,对迭代的每一项进行处理,将处理后的结果统一起来进行比较大小,返回大的一项的原数据。
示例代码1
dic ={'k1':10, 'k2':200, 'k3':20}
ret = max(dic, key=lamda x : dic[x])
print(ret)
分析:
字典默认迭代键值
1) 先取k1,以k1为参传入匿名函数作为x,经dic[x]处理得10。
2) 再取k2,以k2为参传入匿名函数作为x,经dic[x]处理得200。
3) 最后取k3,以k3为参传入匿名函数作为x,经dic[x]处理得20。
4) 集中比较10,200,20 得200最大,返回200对应的参数x,即k2。
5) 最后返回为k2。
示例代码2
dic ={'k1':10, 'k2':200, 'k3':20}
ret = max(dic, key=lamda x : x)
print(ret)
字典默认迭代键值
1) 先取k1,以k1为参传入匿名函数作为x,经x处理得k1。
2) 再取k2,以k2为参传入匿名函数作为x,经x处理得k2。
3) 最后取k3,以k3为参传入匿名函数作为x,经x处理得k3。
4) 集中比较k1,k2,k3 得k3最大,返回k3对应的参数x,即k3。
5) 最后返回为k3。
示例代码3
lst = [
{'name': 'egon', 'price': 100},
{'name': 'rdw', 'price': 666},
{'name': 'zat', 'price': 1}
]
ret = max(lst, key=lambda dic: dic['price']) # 指定比较内容
print(ret)
分析:
1) 先取{'name': 'egon', 'price': 100},以{'name': 'egon', 'price': 100}为参传入匿名函数作为dic,经dic['price']处理得100,
2) 再取{'name': 'rdw', 'price': 666},以{'name': 'rdw', 'price': 666}为参传入匿名函数作为dic,经dic['price']处理得666,
3) 最后取{'name': 'zat', 'price': 1},以{'name': 'zat', 'price': 1}为参传入匿名函数作为dic,经dic['price']处理得1
4) 集中比较100,666,1得666最大,返回666对应的参数dic,即{'name': 'rdw', 'price': 666}。
5) 最后返回{'name': 'rdw', 'price': 666}
注意:因为返回是字典,所以可能乱序
总结与发现
不论匿名函数怎么处理参数,返回的不是处理后的结果,而是结果对应的参数本身。
下面这些图的红圈圈才是返回的东西
参考文档: python 使用 max函数求字典的最大值(lambda表达式)