안녕하세요. BlockDMask입니다.
오늘은 파이썬 map 함수에 대한 이야기를 해보려 합니다.
<목차>
1. 파이썬 map 함수 설명과 사용법
2. 파이썬 map 함수 예제
1. map 함수 설명과 사용법
1-1) 파이썬 맵 함수 기본 설명
map(function, iterable)
map 함수의 모양은 위와 같습니다.
첫 번째 매개변수로는 함수가 오고
두 번째 매개변수로는 반복 가능한 자료형(리스트, 튜플 등)이 옵니다.
map 함수의 반환 값은 map객체 이기 때문에 해당 자료형을 list 혹은 tuple로 형 변환시켜주어야 합니다.
함수의 동작은 두 번째 인자로 들어온 반복 가능한 자료형 (리스트나 튜플)을 첫 번째 인자로 들어온 함수에 하나씩 집어넣어서 함수를 수행하는 함수입니다.
map(적용시킬 함수, 적용할 값들) 이런 식인 거죠.
예를 들어 첫 번째 인자가 값에 +1을 더해주는 함수라고 하고 두번째 인자에 [1, 2, 3, 4, 5] 라는 리스트를 집어넣으면
함수의 모양은 아래와 같고
map( 값에 +1 을 더해주는 함수, [1,2,3,4,5])
함수의 반환을 list(. )로 감싸주면
[2,3,4,5,6] 이 되는 함수입니다.
1-2) map 함수를 사용하는 것과 아닌 것의 차이
똑같은 작업을 map을 이용했을 때와 그렇지 않을 때를 비교해보겠습니다.
# 리스트에 값을 하나씩 더해서 새로운 리스트를 만드는 작업
myList = [1, 2, 3, 4, 5]
# for 반복문 이용
result1 = []
for val in myList:
result1.append(val + 1)
print(f'result1 : {result1}')
# map 함수 이용
def add_one(n):
return n + 1
result2 = list(map(add_one, myList)) # map반환을 list 로 변환
print(f'result2 : {result2}')
이런 식으로 만약에 map 함수를 이용하지 않으면
for 반복문 같은걸 이용해서 일일이 하나하나 리스트 요소에 접근해서 계산을 해서 리스트에 하나씩 또 append 해주어야 하는 번거로움이 있습니다.
하. 지. 만. map 함수를 이용하면 우리는 요소에 적용할 함수 하나만 딱 넘겨준다면
알아서, 자동적으로 리스트를 함수에 적용해서 map 객체를 반환해 줍니다. 우리는 그걸 list로 형 변환해서 사용하면 됩니다.
2. map 함수 예제
2-1) 리스트와 map 함수
import math # math.ceil 함수 사용
# 예제1) 리스트의 값을 정수 타입으로 변환
result1 = list(map(int, [1.1, 2.2, 3.3, 4.4, 5.5]))
print(f'map(int, 리스트) : {result1}')
# 예제2) 리스트 값 제곱
def func_pow(x):
return pow(x, 5) # x 의 5 제곱을 반환
result2 = list(map(func_pow, [1, 2, 3, 4, 5]))
print(f'map(func_pow, 리스트) : {result2}')
# 예제3) 리스트 값 소수점 올림
result3 = list(map(math.ceil, [1.1, 2.2, 3.3, 4.4, 5.5, 6.6]))
print(f'map(func_ceil, 리스트) : {result3}')
예제 1번)
데이터 타입을 변환하는 함수를 바로 넣어 줄 수 있습니다.
첫 번째 인자로 들어간 함수가 int (x)이고 들어간 x의 데이터 타입을 int로 변경해주는 것이기 때문에 실수인 1.1, 2.2 등의 값이 들어가서 정수 타입으로 나오는 것을 알 수 있습니다.
예제 2번)
값의 n 제곱을 구할 수 있는 함수 pow를 이용해서 들어온 리스트의 값을 5 제곱하도록 만들어 주었습니다.
pow 함수에 더 자세히 알고 싶다면 [바로가기]
예제 3번)
math.ceil(x) 함수를 바로 직접 넣어줌으로써 리스트의 값을 소수점 올림 처리를 해보았습니다.
이처럼 인자가 1개인 함수는 직접 넣어줄 수 도 있습니다.
소수점 올림, 내림 함수에 대해서 더 자세히 알고 싶다면 [바로가기]
2-2) 람다와 map 함수
map의 첫 번째 인자로 함수가 들어간다면
이름 없는 함수 즉, 람다 함수도 가능하다는 뜻 아니겠습니까?
만약에 map의 인자로 사용할 함수가 일회성이거나 매우 짧은 경우에는 람다 함수를 사용해서 넘기는 게 좀 더 효율적 일 것입니다.
# map 과 lambda
# 일반 함수 이용
def func_mul(x):
return x * 2
result1 = list(map(func_mul, [5, 4, 3, 2, 1]))
print(f"map(일반함수, 리스트) : {result1}")
# 람다 함수 이용
result2 = list(map(lambda x: x * 2, [5, 4, 3, 2, 1]))
print(f"map(람다함수, 리스트) : {result2}")
이런 식으로 map 함수와 def를 이용해서 리스트의 값을 변화시킬 수도 있지만
간단+일회성 작업이라면 굳이 def를 이용할 필요 없이 map 함수와 lambda를 이용하면 좀 더 유용하게 작업을 할 수 있습니다.
람다 함수에 대해서 더 알고 싶으신 분은 아래 링크로 가시면 더 많은 정보가 있습니다.
2021.05.05 - [<개인공부>/[Python]] - [python] 파이썬 람다(lambda) 함수 설명 및 예제
이렇게 유용한 map 함수에 대해서 알아보았습니다.
감사합니다.
'<개인공부> > [Python]' 카테고리의 다른 글
[python] 파이썬 구글 번역 api 사용하기 (최신버전) (1) | 2021.06.07 |
---|---|
[python] 파이썬 pass 설명과 예제 (0) | 2021.06.04 |
[python] 파이썬 소수점 자리수 제한 방법 3가지 (5) | 2021.06.02 |
[python] 파이썬 filter 함수 사용법과 예제 (0) | 2021.05.31 |
[python] 파이썬 print 줄 바꿈 제거 (0) | 2021.05.29 |
[python] 파이썬 삼각함수(sin, cos, tan)와 각도(degree, radian) 정리 (2) | 2021.05.28 |
[python] 파이썬 팩토리얼(factorial) 구하기 3가지 방법 (1) | 2021.05.27 |
[python] 파이썬 최대공약수, 최소공배수 함수 (gcd, lcm) (0) | 2021.05.13 |