lambda
anonim bir işlevdir, şuna eşdeğerdir:
def func(p):
return p.totalScore
Şimdi max
olur:
max(players, key=func)
Ancak def
ifadeler bileşik ifadeler olduğundan, bir ifadenin gerekli olduğu yerlerde kullanılamazlar, bu yüzden bazen lambda
kullanı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 key
bağı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 key
bir basit ile lambda
:
>>> max(lis, key=lambda x:int(x)) # compare `int` version of each item
'111'
Örnek 2: max
Bir tuples listesine uygulama .
>>> lis = [(1,'a'), (3,'c'), (4,'e'), (-1,'z')]
Varsayılan max
olarak öğ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'