본문 바로가기
Etc./Python

[python] map

by ahj 2021. 8. 15.

코드업 파이썬 100제를 풀면서 ' '으로 띄워진 두 값을 input()하는데 있어서 ex)a,b=input().split()

만약 이 값이 정수라면 새로 정수 c=int(a)로 정의하는 코드를 쓰는 반복이 아까워서 한줄로 간단히 구현 할 수 없을까 찾아보다 map함수를 발견하게 되었고 일단은 그냥 가져다 쓰기만 했다.

 

두 수의 합

(예1)

a,b=input().split()

c=int(a)

d=int(b)

print(c+d)

(예2)

a,b=input().split()

print(int(a)+int(b))

(예3)

a,b=map(int,input().split())

print(a+b)

 

나중에 더 공부하고 실력이 늘면 지금의 나의 생각을 어떻게 볼지 모르겠지만 우선은 (예2)처럼 같은 int()를 2번이나 쓴다는 사실을 용납할 수가 없나보다 내가 (예1)은 말할 것도 없고. 중복을 용납할 수가 없다. 너무 아깝다.

 

일단 지향하는 바는 최대한 소스에 적히는 함수가 모두 다르도록 하는 것이다. 즉, 하나의 함수는 최대한 적은 횟수로 입력될 수 있도록 열심히 짱구를 굴려보자

 

서론이 길었는데 아무튼 이렇게 열심히 map함수를 그냥 써있는대로 가져다 치다가 생각을 해보니 내가 정확히 이해를 안하고 사용하고 있다는 사실을 깨닫고 이왕 공부할 거 흔적이라도 남기자는 취지로 블로그를 만들어서 글을 적어본다.

또 여러 블로그 글들을 읽고 내가 이해한 대로 내 말로 적어서 다시 정리하고 싶었다.

 

<map함수>

 

파이썬 공부에 도움을 받고 있는 점프투파이썬에 적힌 정의(?)에 따르면 다음과 같다.

map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다.

[출처:https://wikidocs.net/32#map]

 

iterable 대충 보면 참 와닿지 않는 개념이다.

하지만 반복가능한 이라는 말이 알맞는 것 같다. 이항대립적으로 사고하면 반복 불가능한 자료형들은 map함수를 이용할 수 없다는 것이니깐

반복 불가능한 자료형들은 뭐가 있을까 구글링에도 나오지 않는 거 봐선 깊게 파고 들지 말자 나중에 경험하게 되겠지

 

우선 내가 하고 있던 행위는 split으로 입력된(input) 값들(4,5 등의 숫자)을 int함수로 a, b에 저장하는것이었다.

 

우선 여기까지

 

+2021.10.10

아직도 map을 그냥 input().split() 용으로만 쓰고 있었네.. iterable 이해를 못하고

list1 = ['1', '100', '33']
list2 = list(map(int, list1))

이렇게 type 변환시 사용할 수 있다! 나는 아직도 for문으로 low level 방식으로 짜고 있었다

 

map(f,iterable)에 들어가는 f에는 그냥 함수면 되는 것이었다

def solution(mylist):
    answer = list(map(lambda x: len(x), mylist))
    return answer

왠지 len 함수 안에 변수를 안넣고 돌리면 안될 것 같아서 lambda 함수로 짰는데

def solution(mylist):
    answer = list(map(len, mylist))
    return answer

그냥 이렇게 넣어주면 되는 거였다.

 

결론적으로 map함수는 f함수에 iterable 변수들을 넣어줘서 묶어주는 역할이었던 것!! 와 이제야 이해가 되고 map함수가 정말 귀한 함수라는 것을 알겠다. 그동안 for문으로 넣어주느라 얼마나 고생했나...

'Etc. > Python' 카테고리의 다른 글

[Python] Function missing arguments  (0) 2021.09.09
[Python] requests  (0) 2021.09.09
[python]Counter 함수 이용 정리  (0) 2021.08.27
[python] try, except 백준 문제10951  (0) 2021.08.18
[Python]연산자  (0) 2021.08.15

댓글