lambda
익명 함수이며 다음과 같습니다.
def func(p):
return p.totalScore
이제 max
이된다 :
max(players, key=func)
그러나 def
명령문은 복합 명령문이므로 표현식이 필요한 곳에서는 사용할 수 없으므로 때때로 lambda
의문이 사용됩니다.
주 lambda
당신이의 return 문에 넣어했던 것과 동일합니다 def
. 따라서 내부에서 문을 사용할 수 없으며 lambda
표현식 만 허용됩니다.
무엇을 max
합니까?
최대 (a, b, c, ... [, key = func])-> 값
반복 가능한 단일 인수로 가장 큰 항목을 반환하십시오. 두 개 이상의 인수를 사용하면 가장 큰 인수를 반환하십시오.
따라서 가장 큰 객체를 반환합니다.
어떻게 key
작동합니까?
기본적으로 Python 2 key
에서는 객체 유형에 따라 규칙 집합을 기준으로 항목을 비교 합니다 (예 : 문자열이 항상 정수보다 큼).
비교하기 전에 객체를 수정하거나 특정 속성 / 인덱스를 기준으로 비교하려면 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]
Python 2에서는 두 가지 유형의 항목을 비교할 수 있습니다 .
>>> max(lis) # works in Python 2
'2'
>>> max(lis, key=lambda x: int(x)) # compare integer version of each item
'111'
그러나 파이썬 3에서는 더 이상 그렇게 할 수 없습니다 :
>>> 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()
그러나 각 객체의 정수 버전을 비교할 때 작동합니다.
>>> max(lis, key=lambda x: int(x)) # or simply `max(lis, key=int)`
'111'