python key lambda_使用“key”和lambda表达式的python max函数
lambda是一個(gè)匿名函數(shù),它等價(jià)于:def func(p):
return p.totalScore
現(xiàn)在max變成:max(players, key=func)
但是由于def語(yǔ)句是復(fù)合語(yǔ)句,因此不能在需要表達(dá)式的地方使用它們,這就是為什么有時(shí)使用lambda語(yǔ)句的原因。
注意lambda相當(dāng)于您在def的返回語(yǔ)句中放入的內(nèi)容。因此,不能在lambda中使用語(yǔ)句,只允許使用表達(dá)式。
做什么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.
所以,它只返回最大的對(duì)象。
如何工作?
在Python 2中,默認(rèn)情況下key基于對(duì)象類(lèi)型(例如字符串總是大于整數(shù))比較基于set of rules的項(xiàng)。
要在比較之前修改對(duì)象,或者基于特定的屬性/索引進(jìn)行比較,必須使用key參數(shù)。
例1:
一個(gè)簡(jiǎn)單的例子,假設(shè)你有一個(gè)字符串形式的數(shù)字列表,但是你想用它們的整數(shù)值來(lái)比較它們。>>> lis = ['1', '100', '111', '2']
這里max使用項(xiàng)目的原始值比較項(xiàng)目(字符串按字典順序比較,以便獲得'2'作為輸出):>>> max(lis)
'2'
要按整數(shù)值比較項(xiàng),請(qǐng)使用key和簡(jiǎn)單的lambda:>>> max(lis, key=lambda x:int(x)) # compare `int` version of each item
'111'
示例2:將max應(yīng)用于元組列表。>>> lis = [(1,'a'), (3,'c'), (4,'e'), (-1,'z')]
默認(rèn)情況下,max將按第一個(gè)索引比較項(xiàng)。如果第一個(gè)索引相同,那么它將比較第二個(gè)索引。在我的示例中,所有項(xiàng)都有一個(gè)唯一的第一個(gè)索引,因此您將得到以下答案:>>> max(lis)
(4, 'e')
但是,如果你想用索引1的值來(lái)比較每一項(xiàng)呢?簡(jiǎn)單:使用lambda:>>> max(lis, key = lambda x: x[1])
(-1, 'z')
比較包含不同類(lèi)型對(duì)象的iterable中的項(xiàng):
包含混合項(xiàng)的列表: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()
但這是可行的,因?yàn)槲覀冋诒容^每個(gè)對(duì)象的整數(shù)版本:>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)`
'111'
總結(jié)
以上是生活随笔為你收集整理的python key lambda_使用“key”和lambda表达式的python max函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 不存在从node到node*的适当转换函
- 下一篇: 苹果手机看python文件大小_Pyth