Programming

🧠 진짜 쉽게 배우는 Python 함수형 프로그래밍: lambda, map, filter, reduce

quantoasis 2025. 3. 31. 15:20
반응형

Python을 배우다 보면 이런 문법들이 등장합니다:

lambda, map, filter, reduce

처음 보면 생소하고, 도대체 왜 쓰는지 감이 안 오기도 하죠.
하지만 코드를 짧고 간결하게 만들 수 있어서, 파이썬스러운 코드 작성을 위해 꼭 알아야 하는 기본 문법입니다.

이 글에서는 초보자도 이해할 수 있도록 하나하나 아주 쉽게 설명해드릴게요. 🚀


🔸 1. lambda 함수 – 이름 없는 함수

✅ lambda란?

lambda짧은 함수한 줄로 정의할 때 사용합니다.
함수 이름을 생략하기 때문에 익명 함수라고도 부릅니다.

📌 우리가 원래 알던 함수 만들기 방식부터 볼게요.

# 일반 함수
def plus(x, y):
    return x + y

print(plus(3, 4))  # 👉 7

이걸 lambda로 바꾸면 이렇게 됩니다:

plus = lambda x, y: x + y
print(plus(3, 4))  # 👉 7

차이점:

  • def를 쓰지 않고
  • return도 쓰지 않으며
  • lambda 매개변수들: 결과값 형식으로 표현

✅ 왜 lambda를 쓸까?

lambda함수를 딱 한 번만 잠깐 쓸 때 매우 유용합니다.

예를 들어 어떤 리스트를 정렬할 때, 비교 기준을 직접 함수로 넘겨줘야 할 때가 있어요:

words = ['banana', 'kiwi', 'apple']
sorted_words = sorted(words, key=lambda word: len(word))
print(sorted_words)  # 👉 ['kiwi', 'apple', 'banana']

👉 단 한 줄짜리 함수를 따로 만들지 않아도 됩니다.


🔸 2. map() – 리스트 전체에 함수 적용

✅ map()이란?

map()리스트의 모든 값에 함수하나하나 적용해서 바꿔줍니다.

예를 들어 리스트의 모든 숫자를 2배 하고 싶다고 해볼게요.

nums = [1, 2, 3, 4]

# 일반적인 방법
doubled = []
for num in nums:
    doubled.append(num * 2)

print(doubled)  # 👉 [2, 4, 6, 8]

이걸 map()lambda로 바꾸면 이렇게 됩니다:

doubled = list(map(lambda x: x * 2, nums))
print(doubled)  # 👉 [2, 4, 6, 8]

map(함수, 리스트)
함수가 리스트의 모든 값에 적용됩니다.


🧪 초보자가 이해하기 쉬운 예제

names = ['Tom', 'Jane', 'Eric']
# 이름을 모두 소문자로 바꾸기
lowered = list(map(lambda x: x.lower(), names))
print(lowered)  # 👉 ['tom', 'jane', 'eric']

🔸 3. filter() – 조건에 맞는 값만 남기기

✅ filter()란?

filter()리스트에서 특정 조건을 만족하는 값만 골라냅니다.

예를 들어 짝수만 고르고 싶다고 해볼게요.

nums = [1, 2, 3, 4, 5, 6]

# 일반적인 방법
even = []
for num in nums:
    if num % 2 == 0:
        even.append(num)

print(even)  # 👉 [2, 4, 6]

filter()로 하면 이렇게 됩니다:

even = list(filter(lambda x: x % 2 == 0, nums))
print(even)  # 👉 [2, 4, 6]

filter(조건함수, 리스트)
조건함수에서 True가 되는 값만 남습니다.


🧪 예제: 5글자 이상인 단어만 남기기

words = ['apple', 'banana', 'kiwi', 'melon']
long_words = list(filter(lambda x: len(x) >= 5, words))
print(long_words)  # 👉 ['apple', 'banana', 'melon']

🔸 4. reduce() – 값을 하나로 줄이기

✅ reduce()란?

reduce()리스트의 값들을 차례대로 누적 계산해서 하나의 값으로 만듭니다.

예: 합계 구하기, 곱하기 등

from functools import reduce  # 꼭 import 해야 함

nums = [1, 2, 3, 4]

total = reduce(lambda x, y: x + y, nums)
print(total)  # 👉 10

첫 번째 두 값을 계산하고 → 결과를 다음 값과 계산하고 → … 마지막까지 반복


🧪 예제: 누적 곱 구하기

nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product)  # 👉 24

🔁 전체 요약 예제

짝수만 골라서 제곱하고, 그 합을 구하고 싶다면?

from functools import reduce

nums = [1, 2, 3, 4, 5]

result = reduce(
    lambda x, y: x + y,
    map(
        lambda x: x ** 2,
        filter(lambda x: x % 2 == 0, nums)
    )
)

print(result)  # 👉 20 (2² + 4² = 4 + 16)

🧩 이 네 가지 헷갈릴 때 정리

함수 하는 일 형태 예시
lambda 한 줄짜리 함수 만들기 lambda x: x + 1 리스트 정렬 기준 등
map() 리스트 전체 변환 map(func, list) 각 요소 2배 만들기
filter() 조건 통과한 값만 남기기 filter(func, list) 짝수만 남기기
reduce() 값들을 누적해서 하나로 reduce(func, list) 합계, 곱 구하기

✅ 마무리 요약

  • lambda: 이름 없이 쓰는 짧은 함수
  • map(): 모든 값을 변형
  • filter(): 조건 맞는 것만 골라냄
  • reduce(): 모든 값을 누적해서 하나로 만들기

이 함수들은 for문으로도 충분히 구현 가능하지만,
한 줄로 간단하게 표현하면 코드가 더 깔끔하고 파이썬답게 보입니다.

처음에는 낯설지만, 자주 사용하다 보면 매우 강력한 도구가 될 거예요!
🔁 직접 손으로 몇 번씩 연습해보는 게 가장 좋습니다.


반응형