람다(lambda) 함수란?
python에서 'def'로 함수를 정의하여 사용한다. 그러나 람다 표현식(lambda expression)을 통해 간단하게 함수를 작성할 수 있다. 람다 함수는 익명(anonymous) 함수라고도 부르며, 함수를 인자로 넣을 때 주로 사용한다. 람다 표현식을 시작으로 람다 함수의 개념과 사용법을 알아보자.
람다 표현식(lambda expression)
람다 표현식은 람다 함수(익명 함수)를 만드는 데 사용된다. 람다 표현식은 다음과 형태로 사용하며, 함수 객체를 가지게 된다.
# parameter_list : 매개변수, expression : 표현식
lambda [parameter_list] : expression
정의된 함수 객체는 아래와 같은 함수 객체처럼 동작한다.
def <lambda>(parameters):
return expression
람다 표현식의 활용
람다 표현식을 활용하여 람다 함수를 만드는 예제를 살펴보자. square 함수는 x의 제곱을 반환한다.
def square(x):
return x * x
square(3)
# result : 9
square 함수를 람다 표현식으로 변환하면 다음과 같다.
square = lambda x : x * x
square(3)
# result : 9
주의할 점
람다 표현식 내에는 새로운 변수를 생성할 수 없다. 따라서 변수가 필요한 코드일 경우 def로 함수를 작성하는 것이 좋다.
lambda x: y = 10; x + y
# result : SyntaxError: invalid syntax
map()
map()은 함수와 리스트를 인자로 받아 리스트로부터 원소를 하나씩 꺼내 함수를 적용하여 새로운 리스트에 담는다.
map(function, list)
map()과 람다 표현식 함께 사용하기
아래 코드에 적용된 람다 표현식은 위에서 본 표현과 똑같이 제곱을 반환해준다. 이를 map()에 적용하여 리스트의 각 원소를 함수에 적용한 결과를 얻을 수 있다.
list(map(lambda x : x ** 2, range(5))) # range(5) is [0, 1, 2, 3, 4]
# result : [0, 1, 4, 9, 16]
reduce()
reduce()는 시퀀스(문자열, 리스트, 튜플)의 원소들을 누적하여 함수에 적용시킨다.
reduce(function, sequence)
reduce()와 람다 표현식 함께 사용하기
아래의 예제는 먼저 0과 1을 더하고, 그 결과에 2를 더하고, 이어서 3, 4를 더한 값을 반환해 준다. 결론적으로 모두 더한 값이 반환된다. python3에서는 import를 해줘야 사용 가능하다고 한다.
from functools import reduce
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
# result : 10
아래의 예제는 y + x로 반환하는 람다 함수를 사용하였는데, 한 눈에 이해하기 힘들 수 있다. x(a) y(b)를 더해 ba가 되고, 이어서 c를 더해주면 cba가 된다. 따라서 edcba와 같은 뒤집어진 문자열을 반환한다.
reduce(lambda x, y: y + x, 'abcde')
# result : edcba
filter()
filter()는 리스트에 있는 원소들을 함수에 적용시켜서 참인 값들로 새로운 리스트를 생성한다.
filter(function, list)
filter()와 람다 표현식 함께 사용하기
다음은 0 ~ 9의 수가 저장된 리스트에서 5보다 작은 수를 찾는 코드이다. 0 ~ 4는 참, 5 ~ 9는 거짓이므로 [0, 1, 2, 3, 4]가 반환된다.
filter(lambda x: x < 5, range(10))
# result : [0, 1, 2, 3, 4]
다음 예제는 filter()를 활용하여 홀수의 원소만 참이 되도록 작성한 코드이다.
filter(lambda x: x % 2, range(10))
# result : [1, 3, 5, 7, 9]
sorted(), sort()
sorted()에서는 key에 대응하는 함수에 리스트의 각 원소를 적용한 결과를 바탕으로 정렬한다.
sorted(list, key=function)
sorted(), sort()와 람다 표현식 함께 사용하기
문자열에 따라 정렬하는 것이 아니라 각 문자열의 길이를 key로 지정하여 key 값에 따른 오름차순으로 정렬된다.
mylist = ['apple', 'banana', 'agg']
mylist2 = sorted(mylist, key=lambda x: len(x))
mylist2
# result : ['agg', 'apple', 'banana']
아래 예제는 프로그래머스 '가장 큰 수' 문제를 풀며 작성한 코드이다. numbers의 각 원소를 이어 붙였을 때, 가장 큰 숫자가 되도록 하는 문제이다. 여기서 각 원소를 4자리로 인덱싱하여 해당 수를 기준으로 내림차순 정렬하도록 하였다. 문제에 대한 이해보다는 다양하게 key를 지정하여 정렬할 수 있다는 것을 알려주고자 하였다.
numbers = [1, 16, 6, 40]
numbers.sort(key=lambda x : (x * 4)[:4], reverse = True)
numbers
# result : [6, 40, 16, 1]
참고링크
Python 공식 문서 : 람다(Lambdas)
https://docs.python.org/ko/3/reference/expressions.html#index-90
위키독스 : 왕초보를 위한 Python: 쉽게 풀어 쓴 기초 문법과 실습
코딩 도장 : 32.1 람다 표현식으로 함수 만들기
https://dojang.io/mod/page/view.php?id=2359
파이썬 마스터하기 : 람다(Lambda) 함수
'Python' 카테고리의 다른 글
[Python] 특정, 다중 조건으로 리스트 정렬하기 (0) | 2024.11.04 |
---|---|
[Python] 셰이프 파일(shp) 데이터의 위도, 경도 및 주소 추출하기 (1) | 2024.09.27 |
[Python] 한 줄에 여러 개 입력받기(map, split) (2) | 2024.05.17 |
[Python] 데크(Deque) 개념과 활용 (0) | 2024.05.15 |
[Python] enumerate() 함수 개념과 활용 (0) | 2024.03.30 |