lambda anonim bir işlevdir, şuna eşdeğerdir:
def func(p):
return p.totalScore
Şimdi maxolur:
max(players, key=func)
Ancak defifadeler bileşik ifadeler olduğundan, bir ifadenin gerekli olduğu yerlerde kullanılamazlar, bu yüzden bazen lambdakullanılır.
Bunun lambda, bir dönüş ifadesine eklediğinize eşdeğer olduğunu unutmayın def. Bu nedenle, a içindeki ifadeleri kullanamazsınız lambda, sadece ifadelere izin verilir.
Ne yapar max?
max (a, b, c, ... [, anahtar = işlev]) -> değer
Tek bir yinelenebilir argümanla, en büyük öğesini döndürün. İki veya daha fazla bağımsız değişkenle, en büyük bağımsız değişkeni döndürün.
Yani, en büyük nesneyi döndürür.
Nasıl keyçalışır?
Python 2'de varsayılan olarak keyöğeleri nesnelerin türüne göre bir dizi kurala göre karşılaştırır (örneğin bir dize her zaman bir tamsayıdan daha büyüktür).
Karşılaştırmadan önce nesneyi değiştirmek veya belirli bir niteliğe / dizine göre karşılaştırmak için keybağımsız değişkeni kullanmanız gerekir .
Örnek 1:
Basit bir örnek olarak, dize biçiminde bir sayı listeniz olduğunu, ancak bu öğeleri tamsayı değerleriyle karşılaştırmak istediğinizi varsayalım.
>>> lis = ['1', '100', '111', '2']
Burada maxöğeleri orijinal değerlerini kullanarak karşılaştırır (dizeler sözlükbilimsel olarak karşılaştırılır, böylece '2'çıktı olarak elde edersiniz ):
>>> max(lis)
'2'
Onların tamsayı değeri kullanılarak öğeleri karşılaştırmak keybir basit ile lambda:
>>> max(lis, key=lambda x:int(x)) # compare `int` version of each item
'111'
Örnek 2: maxBir tuples listesine uygulama .
>>> lis = [(1,'a'), (3,'c'), (4,'e'), (-1,'z')]
Varsayılan maxolarak öğeleri ilk dizine göre karşılaştırır. İlk dizin aynıysa, ikinci dizini karşılaştırır. Örneğimde olduğu gibi, tüm öğelerin benzersiz bir ilk dizini vardır, bu yüzden bunu yanıt olarak alırsınız:
>>> max(lis)
(4, 'e')
Ancak, her bir öğeyi dizin 1'deki değerle karşılaştırmak isterseniz ne olur? Basit: kullanın lambda:
>>> max(lis, key = lambda x: x[1])
(-1, 'z')
Farklı türde nesneler içeren bir yinelenebilir öğedeki öğeleri karşılaştırma :
Karışık ürünler içeren liste:
lis = ['1','100','111','2', 2, 2.57]
Python 2'de iki farklı tipteki öğeleri karşılaştırmak mümkündür :
>>> max(lis) # works in Python 2
'2'
>>> max(lis, key=lambda x: int(x)) # compare integer version of each item
'111'
Ancak Python 3'te bunu artık yapamazsınız :
>>> 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()
Ancak bu, her nesnenin tamsayı sürümünü karşılaştırdığımız için çalışır:
>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)`
'111'