본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 데이터 처리의 미학 : map()과 filter() 함수 완벽 가이드

by Papa Martino V 2026. 2. 11.
728x90

map()과 filter()
map()과 filter()

 

파이썬 프로그래밍에서 '파이썬답게(Pythonic)' 코드를 작성한다는 것은 단순히 동작하는 코드를 만드는 것을 넘어, 가독성이 높고 효율적인 구조를 설계하는 것을 의미합니다. 그 중심에는 함수형 프로그래밍의 정수라고 불리는 map()filter() 함수가 있습니다. 이 글에서는 초보자부터 전문가까지 실무에서 바로 적용할 수 있는 두 함수의 심층적인 활용법과 내부 메커니즘을 상세히 다룹니다.


1. 왜 map()과 filter()를 배워야 하는가?

데이터의 양이 방대해지는 현대 프로그래밍 환경에서 for 루프를 통한 단순 반복 작업은 코드의 복잡도를 높이고 유지보수를 어렵게 만듭니다. map()filter()선언적 프로그래밍(Declarative Programming) 스타일을 지원하여, '어떻게(How)' 데이터를 처리할지가 아니라 '무엇을(What)' 할지에 집중하게 해줍니다. 이는 코드의 길이를 줄여줄 뿐만 아니라, 메모리 효율성을 극대화하는 제너레이터(Generator) 속성을 가지고 있어 대용량 데이터 처리 시 성능 우위를 점할 수 있게 합니다.


2. map() 함수: 데이터의 변환(Transformation)

map() 함수는 반복 가능한 객체(Iterable)의 모든 요소에 특정 함수를 적용하여 새로운 형태의 데이터를 생성할 때 사용됩니다.

기본 문법

map(function, iterable, ...)

핵심 특징

  • 지연 평가(Lazy Evaluation): 결과값을 즉시 리스트로 반환하지 않고, 값이 필요할 때까지 계산을 늦추는 이터레이터 객체를 반환합니다.
  • 다중 인자 지원: 여러 개의 리스트를 동시에 인자로 전달하여 병렬 처리가 가능합니다.

3. filter() 함수: 데이터의 선별(Selection)

filter() 함수는 반복 가능한 객체 내의 요소 중 특정 조건(함수)을 만족하는(True인) 요소들만 골라낼 때 사용합니다.

기본 문법

filter(function, iterable)

핵심 특징

  • 조건식의 간결화: 복잡한 if 조건문을 함수 하나로 대체하여 데이터 필터링 로직을 명확히 합니다.
  • None 활용: 첫 번째 인자에 None을 넣으면 요소 자체가 참(Truthy)인 것들만 남깁니다.

4. map() vs filter() 핵심 비교

비교 항목 map() filter()
주요 목적 데이터의 형태 변경 및 계산 특정 조건에 맞는 데이터 추출
반환 결과 수 입력 이터러블의 길이와 동일 입력 이터러블의 길이와 같거나 적음
함수 반환값 수정된 값 (Any) 논리값 (Boolean)
객체 타입 map object (Iterator) filter object (Iterator)

5. 실무 적용 Sample Example

실제 개발 현장에서 자주 접하는 상황을 가정한 코드 예시입니다. 람다(Lambda) 함수와 결합했을 때 그 진가가 발휘됩니다.

예제 1: 쇼핑몰 장바구니 가격 일괄 할인 (map 사용)


# 상품 가격 리스트 (단위: 원)
prices = [12000, 45000, 8000, 150000]

# 10% 할인 적용
discounted_prices = list(map(lambda x: int(x * 0.9), prices))

print(f"할인 적용 가격: {discounted_prices}")
# 결과: [10800, 40500, 7200, 135000]

예제 2: 특정 점수 이상의 합격자 명단 추출 (filter 사용)


# 학생 점수 딕셔너리
scores = {"Kim": 85, "Lee": 60, "Park": 92, "Choi": 45}

# 80점 이상인 합격자만 추출
pass_students = list(filter(lambda name: scores[name] >= 80, scores))

print(f"합격자: {pass_students}")
# 결과: ['Kim', 'Park']

6. 전문가의 팁: 리스트 컴프리헨션(List Comprehension)과의 조화

파이썬에서는 mapfilter 대신 리스트 컴프리헨션을 사용하는 경우도 많습니다. 하지만 함수가 이미 정의되어 있거나, 다른 함수와 체이닝(Chaining)하여 가독성을 높여야 할 때는 mapfilter가 월등히 유리합니다. 특히 메모리를 아껴야 하는 대규모 데이터 스트리밍 환경에서는 리스트로 변환하지 않은 map/filter 객체를 그대로 전달하는 것이 성능 최적화의 핵심입니다.


7. 결론: 언제 무엇을 써야 할까?

데이터를 "모두 바꿀 때는 map", 데이터를 "골라낼 때는 filter"를 기억하십시오. 이 두 함수를 자유자재로 구사하는 것만으로도 여러분의 파이썬 코드는 훨씬 전문적이고 효율적인 구조로 탈바꿈할 것입니다.


출처 및 참고문헌

  • Python Software Foundation. (2026). "Built-in Functions: map() & filter()". Python 3.x Documentation.
  • Fluent Python (2nd Edition) - Luciano Ramalho.
  • Real Python Tutorials: "Functional Programming in Python: Beyond for Loops".
728x90