파이썬 map() 함수 마스터하기: 문법, 예제, 모범 사례
파이썬 map() 함수 마스터하기: 문법, 예제, 모범 사례
파이썬 내장 map()은 이터러블(리스트, 튜플, 세트, 문자열, 딕셔너리 등)의 모든 항목에 함수를 적용하고 새로운 이터러블을 반환합니다. 파이썬에서 함수형 스타일 프로그래밍의 초석입니다.
배울 내용
- 문법과 핵심 매개변수
map() 내부 동작 원리
- 내장 함수와
map() 결합
- 문자열, 리스트, 튜플, 딕셔너리, 세트에
map() 적용
- 람다 표현식과
map() 활용
- 단일 호출로 여러 이터레이터 결합
문법
map(function, iterable1, iterable2, ... iterableN)
매개변수
- function: 각 요소에 적용할 필수 호출 가능 객체.
- iterable(s): 하나 이상의 이터러블. 함수 호출 시 각 이터러블에서 요소를 하나씩 받음.
반환값
결과는 map 객체—변환된 항목을 산출하는 지연 이터러블입니다. 리스트, 튜플, 세트로 변환해 값을 소비합니다.
map() 작동 원리
리스트의 각 숫자를 제곱하는 간단한 예제:
def square(n):
return n * n
my_list = [2, 3, 4, 5, 6, 7, 8, 9]
updated = map(square, my_list)
print(list(updated)) # [4, 9, 16, 25, 36, 49, 64, 81]
map 객체는 지연 평가되며, 리스트로 변환하면 강제 평가됩니다.
내장 함수와 map() 사용
단일 인자를 받는 내장 함수와 map() 결합. 예를 들어 실수 반올림:
values = [2.6743, 3.63526, 4.2325, 5.9687967, 6.3265, 7.6988, 8.232, 9.6907]
rounded_vals = map(round, values)
print(list(rounded_vals)) # [3, 4, 4, 6, 6, 8, 8, 10]
문자열에 Map 적용
문자열은 이터러블이므로 map()으로 각 문자나 단어 변환 가능:
def to_upper(s):
return s.upper()
text = "welcome to guru99 tutorials!"
print("".join(map(to_upper, text))) # WELCOME TO GURU99 TUTORIALS!
숫자 리스트에 Map 적용
def times_ten(n):
return n * 10
nums = [2, 3, 4, 5, 6, 7, 8, 9]
print(list(map(times_ten, nums))) # [20, 30, 40, 50, 60, 70, 80, 90]
튜플에 Map 적용
def to_upper_str(s):
return s.upper()
languages = ("php", "java", "python", "c++", "c")
print(list(map(to_upper_str, languages))) # ['PHP', 'JAVA', 'PYTHON', 'C++', 'C']
딕셔너리와 세트에 Map 적용
딕셔너리 순회 시 map()은 키를 받습니다. 세트는 순서가 임의적입니다.
def times_ten(n):
return n * 10
sample_set = {2, 3, 4, 5, 6, 7, 8, 9}
print(sorted(map(times_ten, sample_set))) # [20, 30, 40, 50, 60, 70, 80, 90]
람다 함수 사용
익명 함수로 코드 간결화:
nums = [2, 3, 4, 5, 6, 7, 8, 9]
print(list(map(lambda x: x * 10, nums))) # [20, 30, 40, 50, 60, 70, 80, 90]
여러 이터레이터
예제 1: 두 리스트 더하기
def add(a, b):
return a + b
list1 = [2, 3, 4, 5, 6, 7, 8, 9]
list2 = [4, 8, 12, 16, 20, 24, 28]
print(list(map(add, list1, list2))) # [6, 11, 16, 21, 26, 31, 36]
예제 2: 리스트와 튜플 요소 연결
def concat(a, b):
return f"{a}_{b}"
letters = ['a', 'b', 'b', 'd', 'e']
brands = ('PHP', 'Java', 'Python', 'C++', 'C')
print(list(map(concat, letters, brands))) # ['a_PHP', 'b_Java', 'b_Python', 'd_C++', 'e_C']
핵심 요약
map()은 주어진 함수로 이터러블의 각 요소를 변환합니다.
- 지연 이터레이터 반환;
list, tuple, set으로 변환해 결과 구체화.
- 내장 함수, 사용자 정의 함수, 람다 등 모든 호출 가능 객체와 호환.
- 여러 이터러블 지원; 함수는 일치하는 인자 개수만큼 받아야 함.
- 깔끔한 함수형 스타일 코드와 대규모 데이터셋 효율적 처리에 적합.