python key lambda-凯发k8官方网
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
with a single iterable argument, return its largest item. with two or
more arguments, return the largest argument.
所以,它只返回最大的对象。
如何工作?
在python 2中,默认情况下key基于对象类型(例如字符串总是大于整数)比较基于set of rules的项。
要在比较之前修改对象,或者基于特定的属性/索引进行比较,必须使用key参数。
例1:
一个简单的例子,假设你有一个字符串形式的数字列表,但是你想用它们的整数值来比较它们。>>> lis = ['1', '100', '111', '2']
这里max使用项目的原始值比较项目(字符串按字典顺序比较,以便获得'2'作为输出):>>> max(lis)
'2'
要按整数值比较项,请使用key和简单的lambda:>>> 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')
比较包含不同类型对象的iterable中的项:
包含混合项的列表:lis = ['1','100','111','2', 2, 2.57]>>> max(lis) # works in python 2
'2'
>>> max(lis, key=lambda x: int(x)) # compare integer version of each item
'111'>>> lis = ['1', '100', '111', '2', 2, 2.57]
>>> max(lis)
traceback (most recent call last):
file "", line 1, in
max(lis)
typeerror: unorderable types: int() > str()
但这是可行的,因为我们正在比较每个对象的整数版本:>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)`
'111'
总结
以上是凯发k8官方网为你收集整理的python key lambda_使用“key”和lambda表达式的python max函数的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: 苹果手机看python文件大小_pyth