- 알고리즘 공부를 하다보면 람다(lambda)라는 식을 자주 접하게 된다.
- 도대체 람다가 무엇인지 같이 알아보자.
1. 개념
- 람다는 어떤 함수의 매개변수로 다른 함수를 넣고 싶을 때 사용한다.
- 람다는 anonymous function 이라는 명칭을 갖고 있다. 선언 없이 또는 이름 없이 사용할 수 있는 함수다.
- 람다의 특징은 일회성이다. 함수의 선언부가 없으므로, 한번 사용하면 그걸로 끝이다.
- 람다의 핵심은 지연실행 또는 지연연산이다. 이는 필요할 때만 호출하여 사용하는 방식으로 메모리상의 불필요한 연산을 줄인다는 것을 의미한다.(장점)
2. 사용법
- 예시코드를 보면서 사용법을 익혀보자.
print((lambda x, y, z : x + y + z)(1, 1, 1))
a) anonymous function이라고 부르는 이유
- 함수를 정의해서 사용하는 경우, 다음과 같은 코드가 필요하다.
def add(x, y):
return x + y
add(5, 5)
- 하지만 람다를 사용하면, 다음과 같이 작성할 수 있다.
- 즉, 정의 없이 사용할 수 있기 때문에 anonymous 라는 수식어가 붙는 것이다.
add = lambda x,y : x+y
print(add(5,5))
3. key = lambda x:x[0]
- 파이썬으로 알고리즘 문제 풀이를 공부해봤다면, 위의 람다식을 자주 보았을 것이다.
- Key는 무엇인지, 왜 저렇게 람다를 사용하는지에 대해서 같이 배워보자.
a) Sorted() 함수
- key는 sorted 함수에서 사용되는 속성 값이다.
- 예제를 통해서 기본적인 sorted() 함수의 사용법을 알아보자.
fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}
sorted1 = sorted(fruits)
sorted2 = sorted(fruits.items())
print(sorted1)
print(sorted2)
- 딕셔너리는 Key와 Value로 구분되어 한 쌍을 이루는 값이다.
- sorted()에서 딕셔너리를 매개변수로 사용하면 Key값만 정렬하여 출력한다.
- sorted()에서 딕셔너리.items()를 매개변수로 사용하면, key와 value를 한 쌍으로 정렬하여 출력한다.
- 위의 결과를 보면, 딕셔너리의 요소들이 Key값을 기준으로 정렬된 것을 볼 수 있다. 즉, Key값이 정렬 기준인 것이다.
- 그렇다면 key값을 바꾸면, 정렬 기준도 바뀌지 않을까?
- 그래서 쓰이는 것이 key 라는 속성 값이다.
b) key값을 변경하여 정렬 기준을 바꿔보자.
- 반드시 알아야 할 것은, sorted() 함수에서 key 속성에는 반드시 함수가 들어가야 한다는 것이다.
- 더불어, 딕셔너리의 key 값은 x[0]에 위치하고 value 값은 x[1]에 위치한다는 것을 숙지해놓자.
fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}
def f1(x):
return x[0]
def f2(x):
return x[1]
sorted1 = sorted(fruits.items(), key=f1)
sorted2 = sorted(fruits.items(), key=f2)
print(sorted1)
print(sorted2)
- key값을 f1으로 사용한 sorted1은 key값(= 문자열)을 기준으로 오름차순 정렬된 것을 확인할 수 있다.
- key값을 f2로 사용한 sorted2는 value값(= 숫자)을 기준으로 오름차순 정렬된 것을 확인할 수 있다.
- sorted() 함수는 기본(default)이 오름차순 정렬기에 reverse = True 라는 속성 값을 사용하면 내림차순 정렬을 할 수 있다.
fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}
def f1(x):
return x[0]
def f2(x):
return x[1]
sorted1 = sorted(fruits.items(), key=f1, reverse = True)
sorted2 = sorted(fruits.items(), key=f2, reverse = True)
print(sorted1)
print(sorted2)
c) key에 들어가는 함수를 람다식으로 변경해보자.
- 앞서 언급했듯이, key 속성 값에는 반드시 함수가 들어가야 한다.
- 일회성으로(= 재사용 되지 않는) 사용되는 함수는 선언하기 보다는 람다식으로 바꾸는 것이 코드의 효율을 높인다.
- 앞선 예시에서는 f1(), f2() 함수를 직접 정의하고 사용했는데, 이 부분을 람다식으로 바꿔보자.
fruits = {'apple': 5, 'grape':10, 'banana':7, 'peach':3, 'melon':2}
sorted1 = sorted(fruits.items(), key= lambda x: x[0])
sorted2 = sorted(fruits.items(), key= lambda x: x[1])
print(sorted1)
print(sorted2)
- 람다는 전혀 어려운 것이 아니다.
- 자주 사용해서 잘 익혀놓자.
'컴퓨터공학기초 개념 > 알고리즘 개념' 카테고리의 다른 글
Brute-Force 알고리즘(완전탐색) (0) | 2021.08.18 |
---|---|
Algorithm - 알고리즘 핵심정리 (0) | 2020.10.07 |
Algorithm - 자료구조 핵심정리 (1) | 2020.10.06 |
Advanced Algorithm - Backtracking (0) | 2020.10.05 |
Advanced Algorithm - MST(Improved Prim's Algorithm)(6) (0) | 2020.10.04 |
댓글