오늘 정리할 내용은 map 함수다. map 함수는 python에 내장된 built-in function인데, 데이터 분석 업무를 하면서도 생각보다 자주 사용하게 되어서 꼭 한 번쯤은 정리를 하려고 했었다.
종종 급하게 쓰려고 하다보면 어떻게 쓰는 거더라? .. 하는 때가 많아서, 이번에 메모를 해두려고 한다.
map function
map function을 주로 사용하게 되는 경우는 어떠한 함수를 list 안에 있는 element들에 각각 적용하고 싶을 때이다.
예를 들어서 아래와 같은 root 함수가 있다고 해보자.
정수를 입력 받아서, 그 값의 root를 return하는 함수이다.
def root(num: int) -> float:
if type(num) != int:
raise TypeError("정수만 입력할 수 있습니다 !")
return num**(1/2)
print(root(4))
(위의 결과값은 물론 '2'다.)
참고로 type hint를 적어두면 함수에 커서를 올렸을 때 저렇게 타입 힌트가 나타난다.
이제 아래의 list에 이 root라는 함수를 모두 적용하려고 한다.
target list: number_list = [9, 16, 25, 100, 625]
그러면 다음과 같이 코드를 작성할 수 있을 거다.
number_list = [9, 16, 25, 100, 625]
return_list = []
for element in number_list:
return_list.append(root(element))
print(return_list)
STEP1: 가장 기본적인 사용
이제 map 함수를 사용해서 for 문을 사용하지 않고 위와 같은 과정을 동일하게 수행하려고 한다.
: map(function, target) 으로 사용하면 된다.
print(map(root, number_list)) # map(function, target)
map_result = map(root, number_list)
print(type(map_result))
list(map_result)
<map object at 0x00000131D59502B0>
<class 'map'>
[3.0, 4.0, 5.0, 10.0, 25.0]
결과를 보면 알 수 있지만 수행 결과는 map이라는 class의 object로 나타난다.
그래서 이 값을 실제로 사용하기 위해서는 맨 마지막 줄처럼 list로 변환해주어야 한다.
(혹은 for문을 돌려서 print로 찍어줘도 된다.)
STEP2: 함수의 argument가 2개인 경우
두 번째로 해보려고 하는 것은 적용하고 싶은 함수의 argument가 2개 혹은 그 이상일 경우이다.
우선 root 함수와 비슷하게 n_root 라는 함수가 있다고 해보자.
def n_root(num: int, n: int) -> float:
if type(num) != int:
raise TypeError("정수만 입력할 수 있습니다 !")
return round(num**(1/n), 1)
print(n_root(27, 3))
3.0
이 함수는 num과 n을 입력받아서 num의 (1/n)승을 출력한다.
예쁜 계산 결과를 위해서 일부러 round 처리를 했다.
이제 map 함수를 이용해서 [27, 64, 216] 에 적용해보자.
number_list = [27, 64, 216]
list(map(n_root, number_list, [3]))
이렇게 코드를 작성할 수 있고, 결과는 [3.0]이 나타난다.
다음 두 가지에 유의하자.
1. 우선 3 이 아닌 [3]으로 쓴 이유는 map 함수 안에 iterable object를 넣어주어야 하기 때문이다. 그래서 list 형태로 넣었다.
2. 두 번째로 결과가 예상과 다르게 27에만 적용되어 [3.0]이 나타난 이유는, map 함수가 두 argument의 원소들을 하나씩 짝을 지어서 적용을 하고, 두 개의 길이가 다를 경우 짧은 쪽에 맞추어서 진행을 하기 때문이다.
그래서 우리가 의도한 대로 수행을 하려면 다음과 같이 코드를 수정해야 한다.
number_list = [27, 64, 216]
list(map(n_root, number_list, [3] * len(number_list)))
[3.0, 4.0, 6.0]
map 함수 정리 끝!
사실 filter 함수까지 하려고 했는데 생각보다 오래 걸려서 .. 다음에 하는 걸로. 진짜 끝.
'Pyhon 기초, 실전' 카테고리의 다른 글
[Python 기초] Generator의 뜻과 사용 예시 (0) | 2023.07.22 |
---|---|
[Python 기초] lambda, filter function: 아는 사람만 쓰는 함수 (0) | 2023.07.22 |
[Python 기초] 날짜 및 시간 다루기: datetime module 소개 (0) | 2023.07.18 |
[Python 기초] list, dictionary comprehension and conditional comprehension (1) | 2023.07.17 |
[Python 기초] 여러 가지 파일 읽고 쓰기 (txt, csv, pickle, json 등) (0) | 2023.07.16 |