본문 바로가기

라이브러리

[Python] map() 함수 사용법

map() 함수는 Python 내장 함수 중 하나로, 주어진 함수를 반복 가능한(iterable) 객체의 모든 요소에 적용하여 그 결과를 새로운 iterator로 반환하는 함수입니다. map() 함수는 대개 함수를 반복 가능한 객체의 모든 요소에 적용해야 할 때 유용합니다.

 

1. 기본 설명


map() 함수의 구문은 다음과 같습니다.

 

map(function, iterable, ...)


여기서 function은 적용할 함수, iterable은 적용할 요소를 가지고 있는 반복 가능한(iterable) 객체입니다. 이 함수는 매개변수로 여러 개의 iterable을 받을 수 있습니다. 만약 iterable 객체가 다양한 길이를 가지고 있다면, map() 함수는 가장 짧은 iterable이 완전히 사용될 때까지 요소를 반복합니다.

map() 함수가 반환하는 값은 iterator이므로, list(), tuple(), 또는 다른 반복 가능한(iterable) 객체를 사용하여 결과를 확인할 수 있습니다.

 

2. 예제 코드


다음은 map() 함수를 사용한 간단한 예시입니다.

 

# 각 요소를 제곱하는 함수
def square(x):
    return x**2

# map() 함수를 사용하여 리스트 요소들을 제곱하는 방법
my_list = [1, 2, 3, 4, 5]
result = map(square, my_list)

# 결과 확인
print(list(result)) # [1, 4, 9, 16, 25]


위 예시에서는, map() 함수를 사용하여 square() 함수를 리스트의 각 요소에 적용하여 제곱한 값을 반환하였습니다. 반환된 결과는 iterator 이므로 list() 함수를 사용하여 결과를 확인하였습니다.

map() 함수는 lambda 함수와 같이 사용할 때 특히 유용합니다. 예를 들어, 다음은 lambda 함수와 map() 함수를 사용하여 리스트의 각 요소를 2배로 늘리는 방법입니다.

 

my_list = [1, 2, 3, 4, 5]
result = map(lambda x: x*2, my_list)
print(list(result)) # [2, 4, 6, 8, 10]


위 예시에서는, lambda 함수를 사용하여 각 요소를 2배로 늘렸습니다. 이 함수는 매개변수로 x를 받고, x를 2배로 늘린 값을 반환합니다. 이 함수를 map() 함수의 첫 번째 매개변수로 사용하여 my_list의 모든 요소에 적용하였습니다.

 

3. 주의할점


map() 함수를 사용할 때 주의해야 할 점은 다음과 같습니다.

  • 반환값은 iterator이므로, 결과를 확인하기 위해서는 list(), tuple() 등의 iterable 객체로 변환해주어야 합니다.
  • 여러 개의 iterable 객체를 인자로 받을 수 있지만, 각 객체의 길이가 다르면 가장 짧은 객체의 요소까지만 함수가 적용됩니다. 따라서 map() 함수를 사용할 때는 iterable 객체의 길이가 같도록 조정해주는 것이 좋습니다.
  • 인자로 함수를 넘겨줄 때, 반드시 함수의 이름만 적어주는 것이 아니라 함수를 호출하는 괄호를 포함해서 넘겨줘야 합니다. 예를 들어, map(square, my_list) 대신에 map(square(), my_list)와 같이 괄호를 포함해주어야 합니다.
  • 인자로 함수를 받기 때문에, 사용자가 작성한 함수가 부적절한 경우 예상치 못한 결과가 발생할 수 있습니다. 따라서 함수를 잘 작성하고, 테스트를 충분히 해보는 것이 중요합니다.
  • Python 3에서는 map() 함수의 결과가 generator 형태로 반환됩니다. 따라서 Python 2와 달리 map() 함수의 결과를 여러 번 사용하거나 저장할 수 없습니다. 이 경우에는 결과를 리스트 등의 iterable 객체로 변환해주어 사용해야 합니다.
  • map() 함수를 사용하는 대신에 list comprehension 등을 사용할 수 있는 경우도 있습니다. map() 함수는 일반적으로 간단한 함수를 반복해서 적용하는 경우에 유용하지만, 리스트 등의 iterable 객체를 변환하는 경우에는 list comprehension 등이 더 효율적일 수 있습니다. 따라서 map() 함수를 사용하기 전에, 다른 방법으로도 문제를 해결할 수 있는지 고려해보는 것이 좋습니다.