[Python 내장 함수] map() : 함수 일괄적용

 

 


1. map함수 란?

map함수는 파이썬의 내장 함수 중 하나로, 주로 반복 가능한 객체(리스트, 튜플 등)의 요소에 대해 어떤 함수를 일괄적으로 적용하고자 할 때 사용됩니다. 기본 사용 방법은 아래와 같습니다. 여기서 function은 적용하고자 하는 함수이며, iterable은 반복 가능한 객체입니다. map() 함수는 결과로 map 객체를 반환하며, 이 객체는 다시 리스트, 튜플 등의 형태로 변환할 수 있습니다. 

 

>>> map(function, iterable)

 

아래 코드는 map함수를 사용하여 주어진 숫자 리스트의 각 숫자를 sequare 함수를 통해 제곱하는 코드입니다.

 

>>> def square(x):
>>>     return x**2

>>> numbers = [1, 2, 3, 4, 5]
>>> result = map(square, numbers)
>>> print(list(result))  

# 출력: [1, 4, 9, 16, 25]

 

map함수는 여러 개의 객체를 동시에 처리할 수 있습니다. 이 경우 function은 여러 개의 인자를 받아야 합니다.

 

>>> def add(x, y):
>>>     return x + y

>>> numbers1 = [1, 2, 3, 4, 5]
>>> numbers2 = [6, 7, 8, 9, 10]
>>> result = map(add, numbers1, numbers2)
>>> print(list(result))  

# 출력: [7, 9, 11, 13, 15]

 


2. 주의  사항

 

map함수는 결과를 map 객체로 반환합니다. 따라서 결과를 사용하기 전에 적절한 형태(리스트, 튜플 등으로 )변환해야 합니다. 변환하지 않은 상태에서 결과를 출력하면 다음과 같이 객체를 출력하게됩니다.

 

>>> result = map(square, numbers)
>>> print(result)  

# 출력: <map object at 0x7f8f4c4a7c50>

 


3. 람다함수와 조합

 

map함수는 람다(lambda)함수와 함께 사용될 때가 있습니다. 람다 함수는 일회성으로 사용할 함수를 간결하게 표현할 수 있습니다. 람다 함수와 map()함수를 함께 사용하면 코드를 더욱 간결하게 만들 수 있습니다. 아래 코드는 두 개의 숫자 리스트에서 각 요소끼리 더하는 코드로 람다 함수와 함께 사용해 더욱 간결해 졌습니다.

 

>>> numbers1 = [1, 2, 3, 4, 5]
>>> numbers2 = [6, 7, 8, 9, 10]
>>> result = map(lambda x, y: x + y, numbers1, numbers2)
>>> print(list(result)) 

# 출력: [7, 9, 11, 13, 15]

 


4. map 함수의 장단점

4.1 코드 간결성

 

map 함수를 사용하면 여러 줄의 for 문을 간결한 한 줄로 축약할 수 있습니다. 그래서 코드가 짧아지고 가독성이 높아집니다.

 


4.2 성능 향상

 

파이썬에서 map 함수는 C로 구현되어 있어 일반적인 for 문보다 더 빠른 실행 속도를 제공합니다. 따라서 데이터 처리 작업에 map 함수를 사용하면 성능을 향상시킬 수 있습니다.

 


4.3 가독성 문제

 

map 함수와 lambda 표현식을 함께 사용하면 코드가 간결해지지만, 가독성이 떨어질 수 있습니다. 이는 코드를 처음 접하는 사람들에게 이해하기 어려울 수 있습니다.

 


5. map함수의 대안

 

리스트 컴프리헨션은 파이썬에서 리스트를 생성하는 또 다른 방법 중 하나로 map함수의 대안이 될 수 있습니다. map함수와 비교할 때, 리스트 컴프리헨션은 조건문을 포함할 수 있다는 장점이 있습니다. 또한, 결과가 바로 리스트 형태로 생성되므로, 따로 변환할 필요가 없습니다. 아래 코드는 숫자 리스트에서 각 숫자를 제곱하는 코드로 리스트 컴프리헨션을 사용했습니다.

 

리스트 컴프리헨션은 간결하고 직관적이기 때문에, 간단한 작업에서는 map함수보다 더 선호되는 방식일 수 있습니다. 하지만 복잡한 작업이나 여러 개의 반복 가능한 객체를 동시에 처리해야 할 때는 map함수를 사용하는 것이 더 적절할 수 있습니다.

 

numbers = [1, 2, 3, 4, 5]
result = [x**2 for x in numbers]
print(result)  # 출력: [1, 4, 9, 16, 25]