lambda
是一个匿名函数,它相当于:
def func(p):
return p.totalScore
现在,
max
变为:
max(players, key=func)
作为复合语句,
def
语句不能在需要表达式的地方使用,这就是有时候会使用
lambda
的原因。
请注意,
lambda
相当于在
def
的返回语句中放置的内容。因此,在
lambda
中不能使用语句,只允许使用表达式。
max
是什么?
max(a, b, c, ...[, key=func]) -> value
如果只有一个可迭代的参数,返回其中最大的元素。如果有两个或更多的参数,则返回最大的参数。
因此,它只是返回最大的对象。
如何使用key
?
在Python 2中,默认情况下,key
基于对象类型的一组规则进行比较(例如,字符串始终大于整数)。
要修改比较前的对象,或者根据特定属性/索引进行比较,必须使用key
参数。
示例1:
一个简单的例子,假设您有一个以字符串形式表示的数字列表,但是您想按其整数值比较这些项。
>>> lis = ['1', '100', '111', '2']
这里的
max
使用原始值进行比较(字符串按字典顺序比较,因此输出为
'2'
):
>>> max(lis)
'2'
要按照整数值比较项目,请使用带有简单lambda的key:
>>> max(lis, key=lambda x:int(x)) # compare `int` version of each item
'111'
例子2:将max
应用于元组列表。
>>> lis = [(1,'a'), (3,'c'), (4,'e'), (-1,'z')]
默认情况下,
max
会按照第一个索引比较项目。如果第一个索引相同,则会比较第二个索引。就像我的例子一样,所有项目都有一个独特的第一个索引,所以你会得到这个答案:
>>> max(lis)
(4, 'e')
但是,如果你想按照索引1的值比较每个项目怎么办?简单:使用lambda
:
>>> max(lis, key = lambda x: x[1])
(-1, 'z')
比较包含不同类型对象的可迭代项:
混合项列表:
lis = ['1','100','111','2', 2, 2.57]
在Python 2中,可以比较两种不同类型的项目:
>>> max(lis) # works in Python 2
'2'
>>> max(lis, key=lambda x: int(x)) # compare integer version of each item
'111'
但在Python 3中你不能再这样做了:
>>> lis = ['1', '100', '111', '2', 2, 2.57]
>>> max(lis)
Traceback (most recent call last):
File "<ipython-input-2-0ce0a02693e4>", line 1, in <module>
max(lis)
TypeError: unorderable types: int() > str()
但是这样有效,因为我们正在比较每个对象的整数版本:
>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)`
'111'
python max lambda
的顶部结果,也许对新用户更有帮助。 - Mark