map 함수의 기능과 사용법
map는 파이썬 내장 함수로, 반복 가능한 객체의 각 요소에 특정 함수를 적용하여 새로운 반복 가능 객체를 생성한다. 반환 값은 map 객체이며, 리스트나 튜플 등으로 변환 가능하다.
구문
map(function, iterable, ...)
- function: 적용할 함수 (내장 함수, 사용자 정의 함수, 또는 람다 표현식).
- iterable: 하나 이상의 반복 가능한 데이터 구조 (리스트, 튜플, 문자열 등).
- 반환값:
map객체 (지연 평가 방식).
기본 예제
단일 반복 가능한 객체 처리:
values = [1, 2, 3, 4]
squared = map(lambda n: n * n, values)
print(list(squared)) # 출력: [1, 4, 9, 16]
여러 반복 가능한 객체 처리:
list_a = [10, 20, 30]
list_b = [5, 15, 25]
sum_result = map(lambda a, b: a + b, list_a, list_b)
print(list(sum_result)) # 출력: [15, 35, 55]
람다 함수의 특징 및 활용
lambda는 이름 없는 간단한 함수를 정의하는 문법이다. 본체에는 단일 표현식만 허용되며, 자동으로 결과를 반환한다.
구문
lambda 매개변수1, 매개변수2: 표현식
사용 예시
함수 정의 및 호출:
multiply = lambda x, y: x * y
print(multiply(4, 7)) # 출력: 28
map와 함께 사용:
numbers = [1, 2, 3, 4]
doubled = map(lambda x: x * 2, numbers)
print(list(doubled)) # 출력: [2, 4, 6, 8]
고차 함수 인자 전달:
def execute_operation(op, data):
return op(data)
result = execute_operation(lambda x: x ** 2, 6)
print(result) # 출력: 36
주의사항 및 규칙
- map의 제약 조건:
- 함수 인자는 반드시 호출 가능한 객체여야 한다.
- 반복 가능한 객체는 유효한 반복 구조여야 하며, 길이가 일치해야 한다. 불일치 시 가장 짧은 객체의 길이까지 처리된다.
- 람다의 제한:
- 단일 표현식만 포함 가능하며, 여러 줄의 명령문이나 복잡한 로직은 허용되지 않는다.
- 익명 함수이므로 단기적 사용에 적합하다.
- 결과는 표현식 자체로 자동 반환되며,
return문을 생략해도 된다.
실제 사례 적용
데이터 변환과 필터링 결합:
data = [1, 2, 3, 4, 5, 6, 7, 8]
even_squares = map(
lambda x: x ** 2,
filter(lambda x: x % 2 == 0, data)
)
print(list(even_squares)) # 출력: [4, 16, 36, 64]
정렬 기준으로 딕셔너리 정렬:
people = [
{'name': 'Charlie', 'score': 85},
{'name': 'Diana', 'score': 92},
{'name': 'Evan', 'score': 78}
]
sorted_by_score = sorted(people, key=lambda p: p['score'])
print(sorted_by_score)
성능과 가독성 고려사항
- 복잡한 람다 표현식은 코드의 이해를 어렵게 만들 수 있으므로, 명확성을 위해 일반 함수로 분리하는 것이 좋다.
map는 지연 평가를 사용하므로, 실제 데이터를 얻으려면list()나 다른 컨버전 메서드를 사용해야 한다.- 간단한 변환 작업에 최적화되어 있으며, 복잡한 로직은 함수 정의를 통해 처리하는 것이 효율적이다.
요약
map는 반복 가능한 데이터의 모든 요소에 함수를 적용하는 도구이고, lambda는 간단한 계산을 위한 익명 함수 생성 기법이다. 두 기능을 결합하면 데이터 처리 코드를 간결하게 작성할 수 있으며, 특히 함수형 프로그래밍 패러다임에서 큰 장점을 발휘한다.