Python 내장 함수인 map은 리스트의 원소마다 특정한 함수를 적용시키는 역할을 합니다.
먼저 map 사용 없이 리스트의 모든 원소를 두배로 만들어보겠습니다.
a = [1,2,3,4,5]
for idx, val in enumerate(a):
a[idx]*=2
print(a) # [2, 4, 6, 8, 10]
반복문 for를 사용하여 리스트의 원소에 하나씩 접근해 2를 곱해주고 다시 저장하는 모습입니다.
하지만 이렇게 코드를 만들면 흔히들 Python답지 못한 코드라고 합니다.
저것도 하나의 방법이긴하지만 더 간단하고 직관적인 방법이 있기 때문에 그렇습니다.
다음은 map을 사용하여 동일하게 원소마다 2를 곱해보겠습니다.
이를 위해서는 위에서 말한 특정 함수(Input마다 2를 곱해주는 함수)가 필요합니다.
이 부분은 lambda를 사용하겠습니다.
a = [1,2,3,4,5]
b = list(map(lambda x:x*2, a))
print(b) # [2, 4, 6, 8, 10]
이처럼 map을 사용하려면
첫번째 인자로는 함수가 필요하며 두번째 인자로는 반복 가능한 객체가 필요합니다.
map 함수의 수행결과는 map object이기 때문에 위 코드처럼 list()로 감싸 표현했습니다.
그렇지 않은 경우의 결과를 보면 이렇습니다.
a = [1,2,3,4,5]
b = map(lambda x:x*2, a)
print(b) # <map object at 0x00605CB0>
map을 list로 변형하지 않으면 print(b)로 결과를 확인할 수가 없는데 이는 map object가 range()와 비슷하게 필요할 때만 하나씩 꺼내보여주기 때문입니다.
map object의 들어있는 값을 보려면 next()를 이용하면 됩니다.
a = [1,2,3,4,5]
b = map(lambda x:x*2, a)
print(next(b)) # 2
print(next(b)) # 4
print(next(b)) # 6
print(next(b)) # 8
print(next(b)) # 10
print(next(b)) # StopIteration error
StopIteration error는 map object가 더이상 보여줄게 없는데 next()로 다음 것을 요구해서 나는 에러입니다.
또는 range()와 같이 for를 이용해도 됩니다.
a = [1,2,3,4,5]
b = map(lambda x:x*2, a)
for i in b:
print(i ,end=" ") # 2 4 6 8 10
next()나 for나 모두 이용하지 않고 싶다면
map obejct를 분리하는 언패킹(unpacking)을 통해 map object가 가지고 있는 값을
표현할 수도 있습니다.
a = [1,2,3,4,5]
a1,a2,a3,a4,a5 = map(lambda x:x*2, a) # unpacking
print(a1) # 2
print(a2) # 4
print(a3) # 6
print(a4) # 8
print(a5) # 10
마지막으로 응용해보겠습니다.
input() 함수를 이용해 입력받은 세 개의 문자를 int로 변환하여 출력해보겠습니다.
(a = input()에서 입력받은 a는 str type입니다.)
a,b,c = map(int, input().split()) # 1 2 3 입력(str type)
print(a, b, c) # 1 2 3 (int type)
같이 읽어보면 좋은 글
2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.
2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄
'파이썬 > 기초문법' 카테고리의 다른 글
Python 클래스에 대해 1 (0) | 2020.03.15 |
---|---|
Python Exception 발생시 해당 소스, 라인 출력하기 (0) | 2020.03.03 |
Python ==과 is의 차이 (0) | 2020.02.12 |
Relative imports in Python 3 (0) | 2020.02.02 |
Multiprocessing vs. Threading in Python: What Every Data Scientist Needs to Know (0) | 2020.01.30 |
댓글