본문 바로가기
IT/Python

[Python] 파이썬 map(), map함수

by 쿠이모 2023. 11. 15.

파이썬 map() 함수는 여러 개의 데이터를 받아서 각각의 요소에 함수를 작용한 결과를 반환하는 내장 함수이다.

리스트, 튜플 등의 반복 가능한(iterable) 객체를 입력받을 수 있다.

 

 

기본 문법은 다음과 같다.

map() 함수 기본 문법

map(function, iterable)
  • function : 각 요소에 적용할 함수
  • iterable : 함수를 적용할 데이터 집합

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

 

 

리스트에 map 사용

map은 리스트의 요소를 지정된 함수로 처리해주는 함수. map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.

  • list(map(함수, 리스트))
  • tuple(map(함수, 튜플))

 

예를 들어 실수가 저장된 리스트가 있을 때 이 리스트의 모든 요소를 정수로 변환하려면 어떻게 해야 할까? 먼저 for 반복문을 사용해서 변환해본다.

>>> a = [1.2, 2.5, 3.7, 4.6]
>>> for i in range(len(a)):
...     a[i] = int(a[i])
...
>>> a
[1, 2, 3, 4]

for range(len(a))를 사용해서 인덱스를 가져오고, 가져온 인덱스로 요소 하나 하나에 접근한 뒤 int로 변환하여 다시 저장.

매번 for 반복문으로 반복하면서 요소를 변환하려니 조금 번거롭다. 이때는 map을 사용하면 편리.

>>> a = [1.2, 2.5, 3.7, 4.6]
>>> a = list(map(int, a))
>>> a
[1, 2, 3, 4]

a = list(map(int, a)) 한 줄로 끝. map int와 리스트를 넣으면 리스트의 모든 요소를 int를 사용해서 변환한다. 그다음에 list를 사용해서 map의 결과를 다시 리스트로 만든다.

 그림 22-19 리스트에 map 함수 사용

사실 map에는 리스트뿐만 아니라 모든 반복 가능한 객체를 넣을 수 있다('39.1 반복 가능한 객체 알아보기' 참조). 이번에는 range를 사용해서 숫자를 만든 뒤 숫자를 문자열로 변환해본다.

>>> a = list(map(str, range(10)))
>>> a
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

range로 0부터 9까지 숫자를 만들고, str을 이용해서 모두 문자열로 변환했다. 리스트를 출력해보면 각 요소가 ' '(작은따옴표)로 묶인 것을 볼 수 있다.

22.6.1  input().split()과 map

지금까지 input().split()으로 값을 여러 개 입력받고 정수, 실수로 변환할 때도 map을 사용했었죠? 사실 input().split()의 결과가 문자열 리스트라서 map을 사용할 수 있었다.

다음과 같이 input().split()을 사용한 뒤에 변수 한 개에 저장해보면 리스트인지 확인할 수 있다.

>>> a = input().split()
10 20 (입력)
>>> a
['10', '20']

10 20을 입력하면 ['10', '20']처럼 문자열 두 개가 들어있는 리스트가 만들어진다.

이제 map을 사용해서 정수로 변환해본다.

>>> a = map(int, input().split())
10 20 (입력)
>>> a
<map object at 0x03DFB0D0>
>>> list(a)
[10, 20]

다시 10 20을 입력하면 맵 객체(map object)가 만들어진다. 이 상태로는 안에 들어있는 값을 볼 수 없으므로 list를 사용해서 리스트로 출력했다. 리스트를 보면 [10, 20]처럼 정수 두 개가 들어있다.

이 리스트 [10, 20]을 변수 두 개에 저장하면 지금까지 사용한 a, b = map(int, input().split())와 같은 동작된다.

>>> a, b = [10, 20]
>>> a
10
>>> b
20

사실 map이 반환하는 맵 객체는 이터레이터라서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능하다. 그래서 a, b = map(int, input().split())처럼 list를 생략한 것('39.2 이터레이터 만들기' 참조).

a, b = map(int, input().split())을 풀어서 쓰면 다음과 같은 코드가 된다.

x = input().split()    # input().split()의 결과는 문자열 리스트
m = map(int, x)        # 리스트의 요소를 int로 변환, 결과는 맵 객체
a, b = m               # 맵 객체는 변수 여러 개에 저장할 수 있음

 

 

[참고]

https://dojang.io/mod/page/view.php?id=2286

'IT > Python' 카테고리의 다른 글

[Python] 파이썬 Counter  (0) 2023.11.24
[Python] 파이썬 aiohttp 라이브러리  (0) 2023.11.16
[Python] 파이썬 언더스코어(_)  (1) 2023.11.14
[Python] 파이썬 반복문에서 언더바(_) 사용  (0) 2023.11.14
[Python] python 동시성  (0) 2023.11.07