본문 바로가기
카테고리 없음

[파이썬 심화] 람다 함수, map과 filter, reduce 활용

by 개발자를 꿈꾸는 사람들과 함꼐 2025. 4. 9.

람다 함수란 무엇인가?

람다 함수(lambda function)는 이름이 없는 간단한 함수입니다.
일회성으로 사용하거나, map, filter 등과 함께 사용되며 코드의 간결함을 높여줍니다.

기본 문법

lambda 매개변수: 표현식

예제: 두 수의 합 구하기

add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

해석:

  • lambda x, y: x + yx + y를 반환하는 함수를 정의합니다.
  • add(3, 5)는 lambda 함수를 호출하여 3과 5를 더합니다.

일반 함수처럼 사용할 수도 있지만, 보통은 한 줄짜리 간단한 연산에 쓰는 것이 적합합니다.

람다와 일반 함수 비교

# 일반 함수
def square(x):
    return x ** 2

# 람다 함수
square_lambda = lambda x: x ** 2

두 방식 모두 같은 기능을 하지만, 람다는 짧고 간결한 함수 표현이 가능합니다.
복잡한 로직에는 일반 함수, 짧고 반복적인 계산엔 람다가 어울립니다.

map과 filter 함수와의 조합

1. map() 함수 - 리스트의 모든 요소에 함수 적용

nums = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, nums))
print(squared)  # [1, 4, 9, 16]

해석:

  • map(함수, 반복가능한 객체) 형태입니다.
  • 각 요소를 lambda x: x**2 함수에 적용하여 새 리스트를 만듭니다.

map()은 리스트 컴프리헨션처럼 반복적인 변환 작업에 유용하게 사용됩니다.

2. filter() 함수 - 조건에 맞는 요소만 걸러냄

nums = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [2, 4]

해석:

  • filter()조건이 True인 값만 추출합니다.
  • lambda x: x % 2 == 0은 짝수인지 검사합니다.

filter()는 조건 필터링에 특화된 함수이며, 리스트 컴프리헨션의 if절과 비슷한 역할을 합니다.

3. map과 filter의 차이점 정리

  • map: 값을 변형해서 새 리스트 생성
  • filter: 조건에 맞는 값을 선택해서 새 리스트 생성

reduce와 실무 활용 예제

1. reduce() 함수 - 누적 계산

from functools import reduce

nums = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, nums)
print(total)  # 출력: 10

해석:

  • reduce()누적 계산을 수행합니다.
  • 첫 번째 요소부터 시작하여 두 번째와 연산 → 결과와 세 번째 → 반복
  • lambda x, y: x + y는 누적합을 계산하는 함수입니다.

reduce()는 리스트의 합계, 곱, 최댓값 계산 등 반복 누적에 사용됩니다.

2. map + filter + lambda 조합

nums = [1, 2, 3, 4, 5, 6]
squared_evens = list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, nums)))
print(squared_evens)  # [4, 16, 36]

해석:

  • filter()로 짝수만 추출한 뒤,
  • map()으로 각 숫자를 제곱

이와 같이 여러 함수형 도구를 결합하면 복잡한 작업도 한 줄로 처리할 수 있습니다.

3. 실무 예제: 문자열 리스트에서 숫자만 추출하고 합산

from functools import reduce

data = ["100", "20", "30원", "50", "오류"]
numbers = list(filter(lambda x: x.isdigit(), data))
total = reduce(lambda x, y: int(x) + int(y), numbers)
print(total)  # 출력: 170

해석:

  • filter()로 숫자만 걸러냅니다.
  • reduce()로 문자열 숫자를 정수로 바꿔 누적 덧셈을 합니다.

실무에서는 데이터 정제, 변환, 집계 작업에 이 조합이 매우 유용합니다. 파이썬의 lambda, map, filter, reduce는 코드의 양을 줄이고 복잡한 반복문을 깔끔하게 정리해주는 함수형 프로그래밍 도구입니다. 처음에는 낯설 수 있지만, 자주 쓰는 패턴부터 연습하면 점점 더 유용하게 느껴질 것입니다. 리스트 컴프리헨션과 함께 쓰면 파이썬 코드의 생산성과 가독성이 크게 향상됩니다.