Python - 람다(lambda) 함수의 개념과 활용(filter, map, format)

반응형

람다(lambda) 함수란?

  • 리스트 내포, 조건부 표현식 등. 코드를 간결하게 표현해주는 새로운 함수 정의 방법
  • lambda로 정의, 함수의 def와 같은 역할

람다 함수의 활용

  • 함수의 이름을 정의하지 않고 일회성으로 간편하게 사용
  • 함수로 정의할만큼 복잡하지 않을 때 활용
  • 따로 변수에 할당하지 않고 바로 표현
  • 매개변수의 제한은 없지만 연산은 한줄 표현 제한

람다 함수를 활용하여 코드를 간단히 사용한 예


람다 함수의 기본 형식

  • (lambda 매개변수1, 매개변수2... : 매개변수를 이용한 표현식) (매개변수1, 매개변수2)

사용 예시

if 조건문과 함께 람다 사용

  • 함수와 람다함수 사용의 비교 예시


map내장함수와 함께 람다 사용

map함수란?

- 함수명과 리스트들을 전달, 즉 리스트를 함수의 매개변수로 전달 가능

- 함수에 적용한 값을 지닌 map 객체 리턴(반환)

# 맵을 활용하여 리스트를 매개변수로 전달
def func(x):
    return x * x
# 함수 호출시 제곱
    
a = [1, 2, 3]
b = map(func, a)
print( type(b), list(b) )
# 맵 객체 확인, 리스트화하여 b의 전달 받은 값 확인
>>> <class 'map> [1, 4, 9]

map함수와 람다 사용 예시

맵 함수 활용의 예시와 같은 표현이지만, 훨씬 간결하게 한줄로 표현이 가능하다.

# 람다와 맵 활용
print( list( map( lambda x: x*x , [1, 2, 3]) ) )
# 맵 객체이기 때문에 데이터 타입을 리스트로 변환하여 출력
>>> [1, 4, 9]

filter내장함수와 함께 람다 사용

filter함수란?

- 리스트를 함수의 매개변수로 전달 가능 (맵 함수와 동일)

- 함수에 적용한 값 중 참(True)인 값만을 지닌 filter 객체 리턴(반환)

# 필터를 활용 리스트를 매개변수로 전달
def func(x):
    return x > 2
# 함수 호출시 2보다 큰 값 리턴

a = [1, 2, 3]
b = []
print( list( filter(func, a) ) )
>>> [3]
# filter 객체이기때문에 리스트로 변환
# 참의 값인 3만 리턴

filter함수와 람다 사용 예시

필터 함수 활용의 예시와 같은 표현이지만, 이 또한 훨씬 간결하게 한줄로 표현이 가능하다.

# 람다와 필터 활용
print( list (filter (lambda x: x>2, [1,2,3] ) ) )
# 필터 객체이기 때문에 데이터 타입을 리스트로 변환하여 출력
>>> [3]

map과 filter의 차이점?

  • 비교식을 사용한 리턴 값은 Bool값 (True(=참), False(=거짓))
  • 비교식에 맵을 사용할 경우 참/거짓 값 리턴
  • 비교식에 필터를 사용할 경우 값이 참인 요소의 값 리턴
    • 같은 비교식에 맵과 필터를 사용한 비교 예시

왼쪽이 맵 활용, 오른쪽이 필터 활용


복잡한 객체 정렬시 람다 사용

students = [('영수', 'A', 15),
            ('철수', 'B', 16),
            ('영희', 'C', 10)]
            
print(sorted(students))
# 리스트 내의 각 튜플의 첫번째의 값 기준 정렬
>>> [('영수', 'A', 15), ('영희', 'C', 10), ('철수', 'B', 16)]

print(sorted(students, key=lambda x: x[1]))
# 리스트 내의 각 튜플의 두번째의 값 기준 정렬
>>> [('영수', 'A', 15), ('철수', 'B', 16), ('영희', 'C', 10)]

print(sorted(students, key=lambda x: x[2]))
# 리스트 내의 각 튜플의 세번째의 값 기준 정렬
>>> [('영희', 'C', 10), ('영수', 'A', 15), ('철수', 'B', 16)]

key?

- 키 값을 기준으로 정렬되고 기본은 오름차순

- sort, sorted 함수에서 사용되며 람다를 이용하여 사용

- 여러 요소가 있을 경우 튜플로 사용 가능


문자열 포맷팅과 함께 람다 사용

# 람다와 포맷 사용
print( (lambda x,y : '{} x {} = {}'.format(x,y, x*y)) (3,4) )
>>> 3 x 4 = 12

반복문과 사용시 리스트 컴프리헨션을 이용하여 표현 가능

# 리스트 컴프리헨션과 람다, 포맷, 이중for문 사용
print( [(lambda x,y: '{} x {} = {}'.format(x,y,x*y))(x,y) for x in range(2,10) for y in range(1,10)])
>>> ['2 x 1 = 2', '2 x 2 = 4' ........ '9 x 8 = 72', '9 x 9 = 81']
반응형