Python map() 함수, 예제와 함께 설명
이 튜토리얼에서는 파이썬의 map() 함수를 활용하여 반복 가능한 객체의 모든 요소에 함수를 적용하는 방법을 알아볼 것입니다.
파이썬은 함수형 프로그래밍 패러다임을 지향하며, 이를 통해 함수를 사용하여 작업을 정의하고 계산을 수행할 수 있습니다. 파이썬에서 함수는 객체로 취급될 수 있으며, 다른 함수를 매개변수로 사용하거나 반환할 수도 있습니다.
map() 함수는 함수를 인수로 받아 반복 가능한 객체의 각 요소에 해당 함수를 적용하는 데 유용하게 사용됩니다.
본 튜토리얼을 마치면 파이썬의 map() 함수를 사용하여 반복문과 리스트 컴프리헨션을 보다 간결하게 작성할 수 있게 될 것입니다. 다양한 예시 코드를 통해 map() 함수를 어떻게 활용할 수 있는지 살펴보겠습니다.
파이썬 리스트의 요소에 함수를 적용하는 방법
예시를 통해 자세히 살펴보겠습니다. 👩🏫
다음과 같이 숫자 리스트 nums가 있다고 가정해 보겠습니다.
nums = [2,4,3,7]
그리고 숫자를 인수로 받아 해당 숫자의 거듭제곱 (n**n) 값을 반환하는 함수 self_pow()가 있다고 가정합니다. 파이썬에서 ** 연산자는 지수 연산자입니다. 즉, a**b는 a의 b 제곱을 계산합니다.
def self_pow(n):
return n**n
우리의 목표는 리스트 nums의 모든 요소에 self_pow() 함수를 적용하여 새로운 리스트 nums_pow를 생성하는 것입니다.
for 루프 사용
가장 기본적인 방법은 for 루프를 사용하는 것입니다.
nums리스트의 각 숫자에 대해,num을 인수로 하여self_pow()함수를 호출합니다.- 함수 호출 결과를 새 리스트
nums_pow에 추가합니다.
nums_pow = []
for num in nums:
nums_pow.append(self_pow(num))
print(nums_pow)
실행 결과, nums 리스트의 각 숫자는 자기 자신의 거듭제곱으로 계산되어 nums_pow 리스트에 저장됩니다. 즉, nums_pow의 요소는 22, 44, 33, 77입니다.
Output [4, 256, 27, 823543]
리스트 컴프리헨션 사용
리스트 컴프리헨션을 사용하면 위의 코드를 더 간결하게 만들 수 있습니다. 이전의 for 루프에서 출력 표현식과 반복되는 리스트를 파악할 수 있습니다.

일반적인 리스트 컴프리헨션 표현식은 다음과 같습니다.
new_list = [<출력 표현식> for 항목 in 반복가능한_객체]
nums_pow 리스트를 생성하기 위한 리스트 컴프리헨션 표현식은 다음과 같습니다.
nums_pow = [self_pow(num) for num in nums] print(nums_pow)
결과는 for 루프를 사용했을 때와 동일합니다.
Output [4, 256, 27, 823543]
루프나 리스트 컴프리헨션 대신 파이썬의 map() 함수를 사용하면, 더욱 간결한 문법으로 반복 가능한 객체의 모든 항목에 함수를 적용할 수 있습니다. 이제 map() 함수의 구문을 자세히 알아보겠습니다.
파이썬 map() 함수 구문

map() 함수의 일반적인 구문은 다음과 같습니다.
map(함수, 반복가능한_객체1, [반복가능한_객체2,..., 반복가능한_객체n])
map() 함수는 최소 두 개의 인수(함수와 반복 가능한 객체)를 받습니다.
위 구문에서:
function은 파이썬 함수 또는 호출 가능한 객체를 나타냅니다. 여기에는 사용자 정의 함수, 내장 함수, 클래스, 인스턴스, 클래스 메서드 등이 포함됩니다.iterable은 리스트, 튜플, 문자열과 같은 유효한 파이썬 반복 가능한 객체입니다.map()함수는 이러한 반복 가능한 객체의 모든 요소에 적용됩니다.
map() 함수는 무엇을 반환할까요?
map() 함수는 맵 객체를 반환합니다. 이 맵 객체를 리스트로 변환하려면 list(map(함수, 반복가능한_객체)) 구문을 사용할 수 있습니다. 필요에 따라 튜플로 변환할 수도 있습니다.

이제 map() 함수의 구문을 배웠으므로 예제 코드를 통해 실습해 보겠습니다.
이 튜토리얼을 따라 하기 위해서는 파이썬 3.x 버전이 필요합니다. 만약 파이썬이 설치되어 있지 않다면, 온라인 파이썬 편집기를 사용하여 코드를 실행할 수 있습니다.
사용자 정의 함수와 함께 map() 함수를 사용하는 방법

#1. 이전 예시에서 리스트 nums의 모든 숫자에 self_pow() 함수를 적용했습니다. map() 함수를 사용하여 self_pow 함수와 리스트 nums를 인수로 전달할 수 있습니다.
주의: 함수를 호출하는 것이 아니라 함수의 이름만 지정해야 합니다. 즉, self_pow()가 아닌 self_pow를 사용해야 합니다.
map() 함수는 맵 객체를 반환합니다.
print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>
다음과 같이 list() 함수를 사용하여 맵 객체를 리스트로 변환할 수 있습니다.
nums_pow = list(map(self_pow,nums)) print(nums_pow)
결과 출력에서 nums 리스트의 각 숫자 num이 nums_pow 리스트의 numnum에 매핑된 것을 확인할 수 있습니다.
Output [4, 256, 27, 823543]
#2. 인치를 센티미터로 변환하는 inch_to_cm() 함수를 고려해 보겠습니다. 1인치 = 2.54cm 입니다.
def inch_to_cm(inch):
return inch*2.54
인치 값을 센티미터로 변환하려면 다음 코드 셀과 같이 map() 함수를 사용할 수 있습니다.
inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)
cms 리스트에는 센티미터로 변환된 인치 값이 저장됩니다.
Output [14.0716, 8.636, 2.54, 63.5, 20.828]
내장 함수와 함께 map() 함수를 사용하는 방법

이번 섹션에서는 파이썬 내장 함수와 함께 map() 함수를 사용하는 방법을 살펴보겠습니다.
#1. 문자열 리스트인 strings가 있다고 가정합니다. 이 리스트는 프로그래밍 언어의 이름들로 구성되어 있습니다. 각 문자열을 대문자로 변환하여 새 리스트 strings_upper를 만들고 싶습니다.
strings = ['JavaScript','Rust','Python','Go']
파이썬의 내장 문자열 메서드 .upper()는 문자열에 적용되어 대문자로 변환된 복사본을 반환합니다.
strings_upper = list(map(str.upper,strings)) print(strings_upper)
strings_upper 리스트에는 대문자로 변환된 문자열들이 저장됩니다.
Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']
#2. 파이썬 내장 함수 len()은 시퀀스를 인수로 받아 해당 시퀀스의 길이를 반환합니다. 문자열 리스트에서 각 문자열의 길이를 구하려면 map() 함수를 사용하여 각 문자열에 len() 함수를 적용할 수 있습니다.
strings_len = list(map(len,strings)) print(strings_len)
Output [10, 4, 6, 2]
#3. map() 함수는 튜플과 같은 다른 컬렉션에도 사용할 수 있습니다.
다음 예시는 침실 개수, 면적, 집이 위치한 도시에 대한 정보를 담고 있는 튜플을 포함합니다.
파이썬에서 type() 함수는 모든 파이썬 객체의 데이터 유형을 반환합니다. 이 튜플의 각 요소의 데이터 유형을 얻으려면 map() 함수를 사용하여 각 요소에 type() 함수를 호출할 수 있습니다.
house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)
맵 객체를 튜플로 변환했습니다. 리스트나 다른 컬렉션으로 변환할 수도 있습니다.
출력 결과에서 2, 758.5, Bangalore의 데이터 유형이 각각 int, float, str로 추론된 것을 확인할 수 있습니다.
Output (<class 'int'>, <class 'float'>, <class 'str'>)
#4. 파이썬에서는 모듈을 import하여 해당 모듈에 정의된 기능을 사용할 수 있습니다.
nums 리스트에 있는 모든 숫자의 제곱근을 계산하려면 math 모듈의 sqrt 함수를 사용할 수 있습니다.
import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt)
Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]
위 출력은 분석하고 따라가기가 어렵습니다. 소수점 이하 두 자리까지 각 제곱근 값을 반올림해 보겠습니다.
파이썬에서 부동 소수점 숫자를 반올림하는 방법
부동 소수점 값을 받아 소수점 이하 두 자리로 반올림하는 round_2() 함수를 정의해 보겠습니다.
def round_2(num):
return round(num,2)
이제 round_2 함수와 nums_sqrt 리스트를 사용하여 map() 함수를 사용할 수 있습니다.
nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round)
Output [5.48, 9.49, 5.83, 6.71, 9.85]
내부 map 함수가 제곱근 리스트인 nums_sqrt를 계산하고 외부 map 함수가 반올림 연산을 수행하는 중첩된 map() 함수를 사용할 수도 있습니다.
nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round)
Output [5.48, 9.49, 5.83, 6.71, 9.85]
위 두 가지 접근 방식 모두 출력 결과는 같습니다. 그러나 위와 같이 함수를 중첩할 때는 코드를 읽고 유지 관리하기 용이하도록 작성해야 합니다.
람다 함수와 함께 map() 함수를 사용하는 방법

이전 섹션에서는 내장 함수 및 사용자 정의 함수와 함께 파이썬 map() 함수를 사용하는 방법을 배웠습니다. 이제 람다 함수라고 하는 파이썬의 익명 함수와 함께 map() 함수를 사용하는 방법을 살펴보겠습니다.
때로는 함수 본문에 단 한 줄의 코드만 필요하고 함수를 한 번만 사용하고 프로그램의 다른 곳에서는 참조하지 않아야 할 경우가 있습니다. 파이썬에서는 람다 함수를 사용하여 이러한 함수를 정의할 수 있습니다.
참고: lambda args: expression은 파이썬 람다 함수를 사용하는 일반적인 구문입니다.
#1. 다음 문자열 리스트를 고려해 보겠습니다. 각 문자열의 역순 복사본을 포함하는 strings_rev 리스트를 얻으려고 합니다.
strings = ['JavaScript','Rust','Python','Go']
파이썬 문자열 슬라이싱을 사용하여 문자열을 역순으로 만들 수 있습니다.
참고: 이것은 문자열 슬라이싱 표현식 str[start:stop:step]의 일반화된 형태입니다.
– start 및 stop 값이 없으면 슬라이스는 문자열의 시작 부분부터 문자열의 끝까지 확장됩니다.
– step의 음수 값은 문자열의 끝에서 시작하는 슬라이스를 제공합니다.
– 따라서 str[::-1]은 str의 역순 복사본을 반환합니다.
다음 람다 함수 lambda x:x[::-1]를 map 함수 내에서 사용할 수 있습니다.
strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)
다른 예시와 마찬가지로 맵 객체를 리스트로 변환합니다. 출력 결과에서 리스트 strings의 각 문자열이 역순으로 바뀐 것을 확인할 수 있습니다.
Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']
#2. 이전 섹션에서 숫자 리스트에 있는 모든 숫자의 제곱근을 계산한 다음 각 제곱근 값을 소수점 이하 두 자리로 반올림했습니다.
이를 위해 round_2() 함수를 사용했습니다. round_2() 함수를 람다 함수로 다시 작성하여 아래에 설명된 map() 함수와 함께 사용해 보겠습니다.
nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)
출력에서 round_2() 함수를 사용하여 얻은 결과와 동일한 것을 확인할 수 있습니다.
Output [5.48, 9.49, 5.83, 6.71, 9.85]
여러 개의 반복 가능한 객체와 함께 map() 함수를 사용하는 방법

지금까지 우리는 하나의 반복 가능한 객체의 모든 항목에 함수를 적용하는 예시를 살펴보았습니다.
하지만 때로는 둘 이상의 인수를 받는 함수가 있을 수 있습니다. 이 경우 각 인수는 리스트나 유사한 컬렉션에 저장될 수 있습니다.
파이썬 map() 함수는 여러 개의 리스트와 함께 사용할 수도 있습니다.
#1. 길이와 너비를 입력으로 받아들이고 길이 * 너비 영역을 반환하는 다음 함수 area()를 생각해 보겠습니다.
def area(length,breadth):
return length*breadth
서로 다른 직사각형의 길이와 너비는 각각 lengths와 breadths라는 두 개의 개별 리스트에 저장되어 있습니다.
lengths = [4,8,10,18] breadths = [9,4,6,11]
map() 함수를 사용하여 lengths와 breadths 리스트를 모두 전달하여 위 리스트에 area 함수를 적용할 수 있습니다.
areas = list(map(area,lengths,breadths)) print(areas)
area 함수는 두 개의 인수를 허용하므로 lengths와 breadths 리스트에서 각각 길이와 너비 값을 사용합니다.
Output [36, 32, 60, 198]
#2. 파이썬 math 모듈에는 임의의 밑수에 대한 로그를 계산하는 데 도움이 되는 log 함수가 있습니다.
참고: log(x, base)는 x의 로그 값을 밑수가 base인 값으로 반환합니다. 밑수가 지정되지 않은 경우 기본 밑수는 e입니다(로그는 자연 로그를 계산).
이 예시에서는:
x리스트는 로그를 계산하려는 값에 해당합니다.base리스트는 로그 계산에 사용할 모든 밑수를 포함합니다.
x = [2,6,12,10] base = [2,3,2,5]
다음과 같이 math.log, 리스트 x, base와 함께 파이썬 map() 함수를 사용하여 새 리스트 log_x를 얻을 수 있습니다.
log_x = list(map(math.log,x,base)) print(log_x)
다음은 출력 결과입니다.
Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]
결론
본 튜토리얼에서 배운 내용을 요약하면 다음과 같습니다.
- 파이썬
map()함수는map(함수, 반복가능한_객체(들))구문을 사용하여 함수와 하나 이상의 반복 가능한 객체를 인수로 사용합니다. - 함수는 모든 유효한 파이썬 호출 가능한 객체일 수 있습니다.
- 함수가 k개의 인수를 취하면
map()함수는 함수와 k개의 인수를 각각의 반복 가능한 객체에서 함께 사용합니다.
다음 튜토리얼에서는 파이썬에서 집합을 사용하는 방법을 알아보겠습니다.