Python - map

Posted by RoadtoS7 on January 09, 2020 · 2 mins read

map

알고리즘 문제에서 한 줄에 여러개의 입력값을 받아서 리스트를 생성하는 코드를 짜던 중, MAP이라는 것을 알게 되었다. 이 김에 Map에 대한 포스팅을 해보려 한다.

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

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

리스트 요소를 형변환 할 때 사용하기 편리하다

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

위의 코드에서 map에 int와 list를 넣으면 리스트의 모든 요소에 int()를 적용하여 반환한다. 그리고 바깥쪽의 list()가 실행되어 map의 결과를 다시 리스트로 만들어 준다.

map과정

map에는 리스트뿐 만만 아니라 반복 가능한 모든 객체를 넣을 수 있다.

아래 코드는 range를 이용하여 숫자를 만든뒤 map을 이용하여 문자열로 변환해서 출력하는 코드이다.

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

range를 이용하여 0부터 9까지의 숫자를 만들고 이를 문자열로 형변환하여 출력하고 있다.

Tip: input().split()의 결과는 리스트였어서 여러개의 정수나 실수를 입력받을 때 map하고 같이 사용될 수 있었다.

map을 이용하여 형변환 한것을 map객체가 반환된다. 따라서 list나 tuple로 형변환하여 사용하는 것이 편리하다.

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

Tip : map이 반환하는 map 객체는 이터레이터라서 변수 여러개에 저장하는 언패킹이 가능하다. 따라서 a, b = map(int, input().split())) 처럼 list로 형변환하지 않아도 a, b에 입력된 것을 차례대로 하나씩 담을 수 있다.

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

x = input().split() # input().split()의 결과로 문자열 리스트가 반환된다, x = 문자열 리스트
m = map(int, x) # 리스트의 요소가 int로 변환된다, 결과로 나오는 것은 map객체이다. m = map 객체
a, b = m # 맵 객체는 변수 여러 개에 저장할 수 있다. a와 b에 map객체의 구성요소가 하나씩 담긴다.

위 포스트는 파이썬 코딩 도장의 리스트에 map 사용하기를 참조했습니다.