파이썬 map 함수 구조
map 함수의 구조는 크게 보면 두 가지 인자로 구성되어 있습니다.
map(적용할 함수, 순회 가능한 객체)
순회 가능한 객체의 각 원소에 지정한 함수를 각각 적용하여
결과를 반환하는 함수인데요.
그냥 설명하면 이해하기 어려우니,
사용 예제로 직접 이해해보도록 하겠습니다.
map 함수 사용 예제
map(int, ['1', '2', '3', 4.5, 5.8]) # 1, 2, 3, 4, 5 순환 가능 객체로 변환
list(map(int, ['1', '2', '3', 4.5, 5.8])) # [1, 2, 3, 4, 5]
int 함수를 5개의 객체에 각각 맵핑하여
string 자료형도 int 자료형으로 바꿔주었고,
float 자료형도 int 자료형으로 변환하면서 소수점 자리를 버렸습니다.
두 번째 줄의 코드처럼 list 자료형으로 변환하여 사용하면 결과를 받기 편합니다.
뒷 자리의 순회 가능한 객체에는 튜플, range 등 순회 가능한 객체 종류라면
모두 사용이 가능하고, 결과는 동일하게 map 객체로 반환됩니다.
map 객체는 위에서 보시다시피 for 문 등에서 순회용으로 사용 가능합니다.
map 함수 인덱싱
ten_times = map(lambda x : 10 * x, (1, 2, 3, 4, 5))
# 인덱싱 불가(TypeError 발생)
ten_times[0]
# 리스트나 튜플 자료형으로 바꿔서 사용
list(ten_times)[0]
참고로, map 함수의 결과로 반환된 map 객체는 인덱싱이 불가능합니다.
TypeError: 'map' object is not subscriptable 메시지가 발생하는데요.
따라서, 순서 정보로 인한 인덱싱이나 슬라이싱을 원한다면,
리스트나 튜플 등 인덱싱 가능한 객체로 바꿔서 사용해야합니다.
복잡한 함수 적용 예제
def game_result(x):
if x == '가위':
return 'win'
elif x == '보':
return 'draw'
else:
return 'lose'
game_list = ['가위', '바위', '보', '가위', '안냄']
result = list(map(game_result, game_list)) # ['win', 'lose', 'draw', 'win', 'lose']
map 함수에는 def로 선언한 복잡한 함수도 당연히 적용 가능합니다.
game_list의 5개 인자의 결과가 각각 반환된 재밌는 예시를
위 코드에서 살펴볼 수 있었습니다.
순회 가능 인자를 2개 이상 받는 경우
# 두개 이상의 iterable 인자를 받는 경우
list(map(lambda x, y : x + y, [1, 2, 3], (9, 13, 2))) # [10, 15, 5]
def elewise_mul(x, y, z):
return x * y * z
list(map(elewise_mul, [1, 2, 3], [1, 3, 5], [2, 4, 6])) # [2, 24, 90]
input 인자 개수가 2개 이상인 함수를 대상으로도 map 적용이 가능합니다.
이 때는 모든 인자들의 같은 위치 인덱스의 자료끼리 매칭을 시켜 결과를 반환합니다.
예를 들어, elewise_mul 함수는 1, 2, 3번째 인덱스의 0번째 끼리 곱은
1 * 1 * 2 =2이고, 1번째끼리의 곱은 2 * 3 * 4 = 24인 식입니다.
이상으로 map 함수의 원리와 사용 예제에 대한 포스팅을 마치겠습니다. 감사합니다.
'Python > 파이썬 기초' 카테고리의 다른 글
파이썬 replace 함수 사용 case 정리, 예시 (0) | 2021.12.06 |
---|---|
파이썬 입력 함수 input() 사용법, 타입 변경 (0) | 2021.12.04 |
파이썬 split 함수 용도, 사용법 (문자열 -> 리스트) (0) | 2021.12.04 |