lambda

ddurru·2024년 12월 9일

lambda

  • 함수를 딱 한 줄만으로 만들어주는 것으로, 쉽게말해 함수를 짧게 만드는 것
  • 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우에 유용하게 사용 가능
  • def 키워드를 사용하여 함수를 정의하는 것보다 간결하고 간편한 방식으로 함수를 정의할 수 있음
lambda a : b
a: 입력 인자 (매개변수)
b: 표현식 
# def 
>>> def hap(x, y):
...   return x + y
...
>>> hap(10, 20)
30

# lambda
>>> (lambda x,y: x + y)(10, 20)
30

활용 예제

1. map()

  • map(함수, 리스트)
  • 해당 함수는 함수와 리스트를 인자로 받으며, 즉 시퀀스(리스트, 튜플 등)의 모든 요소에 함수를 적용한 결과를 반환
>>> list(map(lambda x: x ** 2, range(5)))     # 파이썬 2 및 파이썬 3
[0, 1, 4, 9, 16]

map 함수가 매개변수로 받은 함수는 lambda x: x ** 2, 리스트로 range(5)를 받게 된다. map() 함수와 람다 함수를 사용하여 리스트의 각 요소에 2를 곱한 결과를 리스트에 저장하게 된다.

2. filter()

  • filter(함수, 리스트)
  • 해당 함수는 시퀀스(리스트, 튜플 등)의 모든 요소 중에서 조건에 맞는 요소만을 반환
# x<5가 참인 것만 리스트에 넣어주는 것 
>>> list(filter(lambda x: x < 5, range(10))) # 파이썬 2 및 파이썬 3
[0, 1, 2, 3, 4]
# 홀수만 추출하여 리스트에 넣어주는 것
>>> list(filter(lambda x: x % 2, range(10)))  # 파이썬 2 및 파이썬 3
[1, 3, 5, 7, 9]

3. sorted()

  • 시퀀스(리스트, 튜플 등)의 요소를 정렬한 결과를 반환
# list의 요소를 길이 순으로 정렬한 결과를 list_2 리스트에 저장
>>> list = ['apple', 'banana', 'cherry']
>>> list_2 = sorted(list, key=lambda x: len(x))
>>> print(list_2)
['apple', 'cherry', 'banana']

4. reduce()

  • reduce(함수, 시퀀스)
  • 시퀀스(문자열, 리스트, 튜플)의 원소들을 누적적으로 결합하여 계산한 결과를 반환
>>> from functools import reduce
>>> result = reduce(lambda x, y: x + y, [1, 2, 3, 4])
>>> print(result)  
10 # (1 + 2 + 3 + 4)
>>> reduce(lambda x, y: y + x, 'abcde')
'edcba'

# 작동 원라
# 초기 상태: 시퀀스는 'abcde'
# 첫 번째 단계: x = 'a', y = 'b'
# 계산: y + x = 'b' + 'a' = 'ba'
# 두 번째 단계: x = 'ba', y = 'c'
# 계산: y + x = 'c' + 'ba' = 'cba'
# 세 번째 단계: x = 'cba', y = 'd'
# 계산: y + x = 'd' + 'cba' = 'dcba'
# 네 번째 단계: x = 'dcba', y = 'e'
# 계산: y + x = 'e' + 'dcba' = 'edcba'

# lambda x, y: y + x는 y를 앞에, x를 뒤에 붙이는 함수
# reduce는 시퀀스를 왼쪽부터 차례로 가져오면서 결과를 누적

참고

(1) 파이썬 마스터하기 : 람다(Lambda) 함수
(2) 람다(lambda)

profile
2024.04.15 ~

0개의 댓글