파이썬의 map() 함수는 반복 가능한(iterable) 객체(리스트, 튜플 등)의 모든 요소에 특정 함수를 적용하고, 그 결과를 새로운 map 객체로 반환하는 함수이다. 즉, 여러 요소에 동일한 연산이나 함수를 한 번에 적용할 때 유용하게 사용할 수 있다.
map(data type / 함수, 반환할 형식)
data type / 함수: 각 요소에 적용할 데이터 타입 또는 함수(함수는 한 개의 인자를 받아야 함).map() 함수는 반환값으로 map 객체를 돌려주며, 이를 리스트나 다른 반복 가능한 객체로 변환해서 사용해야 함.map() 함수는 필요할 때만 값을 계산.list()나 for 루프 등으로 명시적으로 요소에 접근할 때만 계산이 발생.int 데이터 타입 적용# 리스트의 각 요소를 `float`에서 `int`로 변경하는 예시
numbers = [1.2, 2.5, 3.7, 4.6]
result = map(int, numbers)
# 결과를 리스트로 변환하여 출력
print(list(result)) # [1, 2, 3, 4]
map 객체로 반환되어, 이를 list()로 변환하여 출력# 리스트의 각 요소에 2를 곱하는 예시
def multiply_by_two(x):
return x * 2
numbers = [1, 2, 3, 4, 5]
result = map(multiply_by_two, numbers)
print(list(result)) # [2, 4, 6, 8, 10]
multiply_by_two() 함수는 리스트 numbers의 각 요소에 대해 호출map() 사용# 람다 함수를 사용해 리스트의 각 요소에 2를 곱하기
numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x * 2, numbers)
print(list(result)) # [2, 4, 6, 8, 10]
map() 함수는 두 개 이상의 반복 가능한 객체를 동시에 처리할 수 있다.
# 두 리스트의 요소를 더하는 예시
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
result = map(lambda x, y: x + y, numbers1, numbers2)
print(list(result)) # [5, 7, 9]
numbers1과 numbers2의 각 요소들이 람다 함수에 전달되고, 두 리스트의 요소가 더해짐.map() 함수는 문자열 같은 다른 반복 가능한 객체에도 적용할 수 있다.
# 문자열의 각 문자를 대문자로 변환
chars = ['a', 'b', 'c', 'd']
result = map(str.upper, chars)
print(list(result)) # ['A', 'B', 'C', 'D']
str.upper는 문자열의 문자를 대문자로 변환하는 메소드로, 리스트 chars의 각 요소에 적용.map() 함수와 for 루프 비교map() 함수는 기본적으로 반복문(for 루프)과 비슷한 역할을 한다. 반복문과 다른점은 map()은 함수형 프로그래밍 스타일을 따른다.
for 루프numbers = [1, 2, 3, 4, 5]
result = []
for num in numbers:
result.append(num * 2)
print(result) # [2, 4, 6, 8, 10]
map() 함수numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x * 2, numbers)
print(list(result)) # [2, 4, 6, 8, 10]
map()의 반환형map() 함수는 map 객체를 반환하는데, 이는 한 번만 반복할 수 있는 이터레이터(iterator)이다. 따라서 list()나 tuple()을 사용해 명시적으로 변환해야 한다.
result = map(lambda x: x * 2, [1, 2, 3])
print(result) # <map object at 0x...> (map 객체)
print(list(result)) # [2, 4, 6] (리스트로 변환)
map() 함수는 게으른 평가(lazy evaluation) 방식으로 동작하므로, 결과를 직접 사용하는 시점까지 계산이 지연된다. 따라서 반복문이나 리스트 등으로 변환해야 결과를 볼 수 있다.map()은 원본 데이터를 변경하지 않는다. 새로운 map 객체를 반환할 뿐, 원본 리스트나 튜플은 변경되지 않는다.