python max函数_使用'key'和lambda表达式的python max函数
小編典典
lambda是一個匿名函數(shù),它等效于:
def func(p):
return p.totalScore
現(xiàn)在max變成:
max(players, key=func)
但是由于def語句是復合語句,因此不能在需要表達式的地方使用它們,這就是有時lambda使用的原因。
請注意,這lambda等效于你在的return語句中輸入的內容def。因此,你不能在內使用語句lambda,僅允許使用表達式。
怎么max辦?
max(a,b,c,... [,key = func])->值
使用單個可迭代的參數(shù),返回其最大的項目。具有兩個或更多參數(shù),返回最大參數(shù)。
因此,它僅返回最大的對象。
key工作如何?
在Python 2中,默認情況下key根據(jù)對象類型(例如,字符串始終大于整數(shù))基于一組規(guī)則比較項目。
要在比較之前修改對象,或基于特定的屬性/索引進行比較,必須使用key參數(shù)。
范例1:
一個簡單的示例,假設你有一個字符串形式的數(shù)字列表,但是你想按其整數(shù)值比較這些項目。
>>> lis = ['1', '100', '111', '2']
這里max使用它們的原始值比較項目(按字典順序比較字符串,這樣你就可以得到‘2’輸出):
>>> max(lis)
'2'
要通過整數(shù)比較項目,請使用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')
比較包含不同類型對象的可迭代項:
混合項目清單:
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 "", line 1, in
max(lis)
TypeError: unorderable types: int() > str()
但這可行,因為我們正在比較每個對象的整數(shù)版本:
>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)`
'111'
2020-02-22
總結
以上是生活随笔為你收集整理的python max函数_使用'key'和lambda表达式的python max函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基于web可视化_Pytho
- 下一篇: 主力的成本是哪条均线