2017-12-30 47 views
0

여기서 전체 기능이다람다 (h, t)의 -h는 무엇입니까? (-h, t)는 무엇을합니까?

def dailyTemperatures(temperatures): 
    queue = [] 
    for p in sorted(temperatures, key=lambda (h, t): (-h, t)): 
     print (p[1]) 
     queue.insert(p[1], p) 
    return queue 

입력 :

[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 

출력 :

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]] 

I는 람다 익명 함수를 생성하는 생성자 알고있다. 이 익명 함수에서는 ht이 매개 변수로 전달됩니다. -h이되면 h은 어떻게됩니까?

+9

음수 기호를 적용 할 때 일반적으로 발생하는 것과 동일한 일이 발생합니다. – BrenBarn

+0

이 경우 입력에서 첫 번째 항목을 취하면 : [7,0]'[-7,0]이됩니까? – Suji

+0

네, 그렇습니다 ... – BrenBarn

답변

3

lambda (h, t): (-h, t)은 튜플 패러미터 압축 풀기를 사용하고 있습니다. 이것은 파이썬 2에서만 사용 가능합니다. 그것은 lambda x:(-x[0], x[-1])에 대한 Pythonic 대안입니다. 음수 부호가 음수 부호로 곱해질 때 어떤 값이든 기대하는 것처럼 작동합니다. 즉, 결과 값은 "숫자 선"에 반영되는 절대 값이므로 원래 값을 무효화합니다. 언 패킹은 함수에 전달 된 목록의 첫 번째와 두 번째 값을 취하여 첫 번째에 음수 부호를 적용합니다.

+1

이 문맥을 더 자세히 설명하기 위해이 람다는'sorted()'함수의 키입니다.이 함수는 목록의 튜플을 생성하고, 목록은 첫 번째 요소에 따라 내림차순으로 정렬되며, 첫 번째 요소가 같은 두 개 이상의 튜플이있는 경우 두 번째 요소가 오름차순으로 정렬됩니다. – kindall

0

람다 함수를 key으로 지정하면 목록의 요소 인 튜플이이 경우 람다 함수로 전송됩니다.

key=lambda (h, t): (-h, t) 

는 보통 람다 식에 우리는 비교 키로 튜플에서 vlue을 선택하지만, 코드는 그냥 는 튜플의 첫 번째 값을 부정 위 보였고, 키로 튜플 자체를 유지 .