IT/언어

[python] python의 sort함수에 사용되는 lambda에 대한 이해

개발자 두더지 2020. 8. 17. 21:20
728x90

이 포스팅에서는 python의 sort함수에 사용되고 있는 'lambda'에 대해 소개한다.

 

1. 사전형이나 리스트 형을 sort할 때 아래와 같은 형식을 자주 마주친다.

사전형이나 리스트 형을 sort하는 경우가 많을 것으로 생각되는데, 그 때

sorted(d.items(), key=lambda x: x[1])

위와 같은 코드를 본 적이 있지 않은가? 나는 자주 보았다.

위의 예에서는 사전의 value를 원래대로 정렬하고 있다.

스스로도 정렬하고 싶을 때 자주 사용하지만, 의미를 잘 모른채 사용해왔다.

이대로는 위험하다고 생각하여 조사해보았다.

 

2. 그나저나 lambda란 무엇인가?

lambda는 무명함수라고 불리며 그 이름대로 이름 없는 함수를 작성할 때 사용한다.

예를 들어 아래의 예에서는 lambda식을 사용해서 '인수를 2제곱하여 반환하는 무명 함수'를 변수 a에 대입하고 있다.

a = lambda x : x*x
print(a(4)) #16

여기서는 '이름이 없는 함수를 만드는 것' 정도로 이미지를 떠올리면 충분하다고 생각한다.

 

3. sort함수로 되돌아 와서

lambda가 사용된 sort함수를 살펴보자.

dictionary = [['なら',3], ['かながわ',4], ['とうきょう',1], ['おおさか',2]]

print(dictionary) # [['なら', 3], ['かながわ', 4], ['とうきょう', 1], ['おおさか', 2]]

sortedDict = sorted(dictionary, key=lambda x: x[1])

print(sortedDict) # [['とうきょう', 1], ['おおさか', 2], ['なら', 3], ['かながわ', 4]]

위의 예에서 리스트의 2번째의 요소를 원래 순서대로 정렬하고 있다.

그것은 sort함수의 key에 '요소 x를 받고, x[1]를 돌려준다'라는 lambda식을 지정하고 있기 때문이다.

이것에 의해, sort함수는 리스트의 2번째의 요소를 key로 하여 정렬한다. 

이번에는 리스트의 첫 번째 요소를 key로 하여 정렬하는 것을 생각해보자.

첫 번째를 key를 하고 싶은 경우, lambda식에 리스트의 첫 번째를 반환하는 함수를 정의하면 될 것이므로, 아래와 같이 코드를 작성할 수 있다.

dictionary = [['なら',3], ['かながわ',4], ['とうきょう',1], ['おおさか',2]]

print(dictionary) # [['なら', 3], ['かながわ', 4], ['とうきょう', 1], ['おおさか', 2]]

sortedDict = sorted(dictionary, key=lambda x: x[0])# <- x[0]に変更

print(sortedDict) # [['おおさか', 2], ['かながわ', 4], ['とうきょう', 1], ['なら', 3]]

 

4. 마무리 : sort함수에 있어서 lambda식이란

lambda식 자체는 굉장히 깊은 내용을 가진 개념이지만, sort함수내에서는 거의 공식과 같이 사용될 뿐이다.

그러므로 아래와 같이 암기해두면 될 것이다.

sorted ([list 혹은 dic], key = lambda x: [key로 지정하고 싶은 요소])


참고자료

https://qiita.com/n10432/items/e0315979286ea9121d57

728x90