본문 바로가기
python

[python] map 함수 사용법, 동작원리 및 특징 (예제포함)

by 도토리묵 :D 2023. 3. 28.

python에 map 함수에 대해 알아봅시다.

 

Python의 map() 함수는 여러 개의 데이터를 받아서 각각의 요소에 함수를 적용한 결과를 반환하는 내장 함수입니다.  리스트, 튜플 등의 반복 가능한(iterable) 객체를 입력으로 받을 수 있습니다.

 

 

map() 함수의 기본 문법은 다음과 같습니다.

 

 

 

 

map 함수 기본 문법

 

map(function, iterable)

 

  • function: 각 요소에 적용할 함수입니다.
  • iterable: 함수를 적용할 데이터 집합입니다.

 

map() 함수는 iterable의 각 요소에 대해 function 함수를 적용한 결과를 새로운 iterator로 반환합니다. 이때, function 함수는 각 요소를 인자로 받아서 처리하며, 함수의 반환값이 새로운 iterator의 각 요소가 됩니다.

 

 

 

 

map 함수 예제

 

map() 함수를 이용하여 간단한 예제를 살펴보겠습니다. 다음 코드는 리스트의 각 요소를 제곱하여 새로운 리스트를 반환하는 예제입니다.

 

def square(x):
    return x**2

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
print(list(squared_numbers))  # [1, 4, 9, 16, 25]

 

위 코드에서 square() 함수는 각 요소를 제곱하여 반환하는 함수입니다. numbers 리스트를 map() 함수를 이용하여 square() 함수를 적용한 결과를 반환한 후, list() 함수를 이용하여 새로운 리스트로 변환한 값을 출력합니다.

 

 

map() 함수는 여러 개의 반복 가능한(iterable) 객체를 입력으로 받아서 여러 개의 데이터를 동시에 처리할 수 있습니다. 예를 들어, 다음 코드는 두 개의 리스트의 요소를 각각 더한 결과를 새로운 리스트로 반복 가능한(iterable) 객체를 여러 개 입력으로 받는 map() 함수의 기본 문법은 다음과 같습니다.

 

map(function, iterable1, iterable2, ...)
  • function: 각 요소에 적용할 함수입니다.
  • iterable1, iterable2, ...: 함수를 적용할 데이터 집합입니다.

여러 개의 반복 가능한 객체를 입력으로 받는 map() 함수는 입력된 각 객체의 요소를 차례대로 하나씩 가져와서 function 함수에 인자로 전달합니다.

 

여러 개의 반복 가능한 객체를 입력으로 받는 map() 함수를 이용하여 간단한 예제를 살펴보겠습니다. 다음 코드는 두 개의 리스트의 요소를 각각 더한 결과를 새로운 리스트로 반환하는 예제입니다.

 

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

numbers1 = [1, 2, 3, 4, 5]
numbers2 = [10, 20, 30, 40, 50]
added_numbers = map(add, numbers1, numbers2)
print(list(added_numbers))  # [11, 22, 33, 44, 55]

 

위 코드에서 add() 함수는 두 개의 숫자를 입력으로 받아서 더한 결과를 반환하는 함수입니다. numbers1numbers2 두 개의 리스트를 map() 함수를 이용하여 add() 함수를 적용한 결과를 반환한 후, list() 함수를 이용하여 새로운 리스트로 변환한 값을 출력합니다.

결과는 주석으로 단것 처럼 [11, 22, 33, 44, 55] 입니다.

 

 

 

 

map 함수 동작 원리

map() 함수의 동작 원리는 다음과 같습니다.

  1. map() 함수가 호출되면, 입력으로 전달된 function 함수와 iterable 객체들을 파라미터로 받습니다.
  2. map() 함수는 가장 짧은 길이를 가진 iterable 객체의 길이만큼 function 함수를 반복적으로 적용합니다.
  3. function 함수는 각 iterable 객체에서 해당하는 인덱스의 요소들을 인자로 받아 처리합니다.
  4. function 함수의 실행 결과는 새로운 이터레이터 객체에 저장됩니다.
  5. map() 함수가 반환하는 값은 iterator 객체입니다.

즉, map() 함수는 입력된 iterable 객체들의 각 요소를 하나씩 가져와 function 함수에 적용하고, 그 결과를 새로운 iterator 반환합니다. map() 함수는 generator 객체를 반환하며, iterator와 비슷한 역할을 합니다.

 

 

 

 

map 함수의 특징

map 함수의 특징을 몇 가지 정리해보았습니다.

 

  • 지연평가(lazy evaluation) 방식: map() 함수는 lazy evaluation 방식을 사용합니다. lazy evaluation이란 필요한 시점까지 연산을 늦추는 방식으로, 불필요한 연산을 최소화하여 성능을 향상시키는 방법입니다. 입력으로 받은 iterable 객체를 순회하면서 각 요소에 대해 함수를 적용하여 새로운 iterable 객체를 생성하지만, 이 과정에서 실제로 변환된 결과값들이 생성되는 것이 아니라, 필요할 때까지 기다리는 것입니다. 이런 방식으로 인해 변환된 결과값이 모두 메모리에 저장되지 않고 부분만 계산하여 처리할 수 있기에 불필요한 메모리 사용을 줄일 수 있습니다.
  • 간결성: map() 함수를 이용하면 반복문을 작성하지 않아도, 한 줄의 코드로 여러 개의 리스트를 동시에 처리할 수 있습니다.
  • 가독성: map() 함수를 이용하면, 코드의 가독성을 높일 수 있습니다.
  • 성능: map() 함수는 내부적으로 C로 구현되어 있으므로, 파이썬 반복문보다 빠르게 처리할 수 있습니다.
  • 메모리 사용량: map() 함수는 새로운 리스트를 생성하지 않고, iterator 객체를 반환하므로, 메모리 사용량을 최소화할 수 있습니다. 하지만, 매우 큰 이터레이터 객체를 처리할 경우, 메모리 사용량이 매우 높아질 수 있습니다.
  • 제약사항: map() 함수는 입력된 모든 이터레이터 객체의 길이가 같아야 하므로, 이러한 제약 사항을 고려하여 사용해야 합니다.

 

 

 

 

이번 시간엔 map 함수에 대해 자세히 알아보았습니다.

필요에 맞게 적절하게 사용한다면 가독성과 코드 성능이 좋아질 거 같습니다.

댓글