May
31st,
2021
Lambda
파이썬에서는 ‘lambda’라는 매우 편리한 익명 함수가 존재한다. 파이썬에서 이 lambda는 filter(), map(), reduce()와 같은 전형적인 기능 개념과 함께 사용되는 매우 강력하고 편리한 기능이다.
긴 설명보다 예를 보는 것이 더 나을 것이다.
n=lambda x:x**2
print(n(8))
출력: 64
f=lambda x, y: x+y
print(f(5,5))
출력: 10
예들이 쉬워서 보면 어떤 느낌인지 알 것이다. 람다에서는 반환값을 만드는 표현식이 있는데 함수가 사용될 수 있는 곳에는 어디라도 람다 정의를 넣을 수 있으며 위의 예처럼 변수에 할당하여 사용할 필요는 없다.
이제 정렬을 할 때 람다를 사용하는 방법에 대해서 알아보자. 일반적으로 우리가 정렬을 할 때 사용하는 두 가지 방법은 sorted()와 .sort()가 있다. 예를 보자.
a=[4,2,7,2,4,6]
b=sorted(a)
# a=[2,2,4,4,6,7]
a=[]
a = [(3, 1), (0, 2), (3, 4), (6, 0), (1, 2)]
# 인자없이 그냥 sorted()만 쓰면, 리스트 아이템의 각 요소 순서대로 정렬을 한다.
b = sorted(a)
# b = [(3, 1), (0, 2), (3, 4), (6, 0), (1, 2)]
# key 인자에 함수를 넘겨주면 해당 함수의 반환값을 비교하여 순서대로 정렬한다.
# 첫 번째 요소로 오름차순 정렬을 한다.
c = sorted(a, key=lambda x: x[0])
print(c)
# c = [(0, 2), (1, 2), (3, 1), (3, 4), (6, 0)]
#두 번째 요소로 오름차순 정렬을 수행한다.
d = sorted(a, key=lambda x: x[1])
# d = [(6, 0), (3, 1), (0, 2), (1, 2), (3, 4)]
# 아이템 첫 번째 요소를 기준으로 오름차순으로 먼저 정렬하고,
# 그리고 그 안에서 다음 두 번째 요소를 기준으로 내림차순으로 정렬하게 하려면, 다음과 같이 할 수 있다.
e = [(1, 3), (0, 3), (1, 4), (1, 5), (0, 1), (2, 4)]
f = sorted(e, key=lambda x: (x[0], -x[1]))
# f = [(0, 3), (0, 1), (1, 5), (1, 4), (1, 3), (2, 4)]
정리
- sorted()의 key 인자로, 내가 커스텀할 비교 함수를 넣어준다.
- 비교 함수는 비교할 아이템의 요소를 반환한다.
- 비교 함수는 익명 함수(lambda)도 가능하고, 별도로 정의 가능하다.
- 비교할 아이템의 요소가 복수 개일 경우, 튜플로 그 순서를 내보내주면 된다.
- -를 붙이면, 현재 정렬차순과 반대로 하게 된다.