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문으로도 충분히 구현 가능하지만,
한 줄로 간단하게 표현하면 코드가 더 깔끔하고 파이썬답게 보입니다.
처음에는 낯설지만, 자주 사용하다 보면 매우 강력한 도구가 될 거예요!
🔁 직접 손으로 몇 번씩 연습해보는 게 가장 좋습니다.
'Programming' 카테고리의 다른 글
📡 Python으로 MSSQL 저장 프로시저 실행하기 (파라미터 전달까지 완벽 정리!) (0) | 2025.03.28 |
---|---|
📬 Python으로 텔레그램에 알림 보내는 방법 (봇 API 활용) (1) | 2025.03.27 |
🔎 Python에서 조건별로 MSSQL 쿼리 동적 생성하기 (f-string과 SQL Injection 방지법) (0) | 2025.03.26 |
📦Python 가상환경(venv) 사용법 + `requirements.txt` 완전정복 (0) | 2025.03.25 |
🔁 MSSQL에서 반복문 처리하기: WHILE vs CURSOR 기초 정리 (0) | 2025.03.24 |