본문 바로가기
파이썬/기초문법

Python Map에 대한 이해

by 행복론자 2020. 2. 14.

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 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

 

[전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

🎁 바이낸스 자동매매 시스템 개발 방법을 담은 책이 출시되었습니다. "나 대신 일해주는 코인선물자동매매 프로그램 개발, 노하우 및 소스를 모두 공개합니다" ✔️ Q: 무슨 내용인가요? Python

jsp-dev.tistory.com

 

2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄

 

[공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프

https://kmong.com/gig/417785 거래소별 코인 프리미엄 알림봇 개발 가이드를 드립니다 | 36000원부터 시작 가능한 총 평점 5점의 3개 총 작업 개수 완료한 총 평점 5점인 JSDEV의 전자책, 투잡·재테크 전자

jsp-dev.tistory.com

 

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글