使用 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 取数列最大值 python 列表求最大值_java


Python 取数列最大值 python 列表求最大值_匿名函数_02


Python 取数列最大值 python 列表求最大值_java_03


Python 取数列最大值 python 列表求最大值_匿名函数_04

参考文档: python 使用 max函数求字典的最大值(lambda表达式)