python key lambda_使用“key”和lambda表达式的python max函数
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'
總結
以上是生活随笔為你收集整理的python key lambda_使用“key”和lambda表达式的python max函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不存在从node到node*的适当转换函
- 下一篇: 苹果手机看python文件大小_Pyth