map 함수 특징

- 여러 개의 데이터를 한 번에 다른 형태로 변화하기 위해 사용한다.

- map 함수는 원본 리스트를 변경하지 않고 새 리스트를 생성한다.

- map 함수는 map 타입으로 결과를 리턴하기 때문에 리스트나 튜플 등으로 변환해야 한다.

- map 함수는 리스트의 요소를 지정된 함수로 처리한다.

x = list(range(5))
x
[0, 1, 2, 3, 4]
def two_times(x):
    return x * 2
y = two_times(x)
y
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
z = list(map(two_times, x))
z
[0, 2, 4, 6, 8]

map 함수 사용법

- map(함수, 반복가능한 객체)

x = [1.1, 2.1, 3.1, 4.1]
y = map(int, x)
print(y)
<map object at 0x0000023B6D93D040>

- map 함수는 map 타입으로 결과를 리턴하기 때문에 리스트나 튜플 등으로 변환한다. $\rightarrow [\star$] 변환하지 않으면 위와 같은 결과를 출력한다. [$\star$]

- print(y)하지 않고 그냥 y만 입력해도 된다.

x = [1.1, 2.1, 3.1, 4.1]
y = list(map(int, x))
y
[1, 2, 3, 4]
def minus(a):
    return a - 0.1
list(map(minus, x))
[1.0, 2.0, 3.0, 3.9999999999999996]

- minus 함수는 map 함수를 위해 한 번 쓰고 버려질 운명이다. 만드는게 귀찮음...

map 함수에 람다 식 사용

x = [1.1, 2.1, 3.1, 4.1]
list(map(lambda a: a - 0.1, x))
[1.0, 2.0, 3.0, 3.9999999999999996]

input().split()과 map

- input()함수는 c언어의 scanf()함수와 비슷하다.

z = input()
z
'hello'

- input()으로 입력받은 값은 문자열이다.

n = input()
type(n)
str

- input()함수에서 안내문구를 추가할 수 도 있다.

Q = input('숫자 하나를 입력하세요:')
Q
'26'

- input()함수의 출력값을 문자열이 아닌 다른 자료형으로 바꾸고 싶다면?

w = int(input('숫자 하나를 입력하세요:'))
type(w)
int

- input().split("기준문자열")을 사용하면 입력값을 변수 여러 개에 저장할 수 있다.

- split()에서 "기준문자열"이 없는 즉 default공백이다.

a, b = input().split() # 입력받은 값을 공백(스페이스, 탭, 엔터 등)을 기준으로 분리
a, b
('10', '20')
c = a, b
type(c)
tuple

- a와b가 문자열이다.

- int형으로 바꾸고 싶다면?

a, b = int(input().split())
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-0de5d52cb787> in <module>
----> 1 a, b = int(input().split())

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

- int()함수를 쓰면 될 것 같았는데 오류가 나온다

- error메시지를 읽어보니 int()함수는 무조건 a string, a bytes-like object or a number 여야 한다.(not 'list')

- a, b는 tuple인 것 같다.

- 그러면 어떻게 하지? $\longrightarrow$ map()함수를 쓰면 된다.

a, b = map(int, input().split()) # 입력받은 값을 정수로 변환
a, b
(10, 20)
type(a)
int
type(b)
int

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

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

map()함수 이용해 한 줄에 여러 값 입력 받기

L = list(map(int, input().split())) 
L
[10, 8, 7, 1, 0, 3, 5, 2]

map()함수 이용해 여러 줄에 여러 값 입력 받기

data = []
N = int(input())
for i in range(N):
    data.append(list(map(int, input().split())))
data
[[1, 4, 0, 2], [17, 8, 1, 0, 4, 6], [1, 0], [0, 4, 5], [0, 0, 10]]