Python/파이썬 기초

파이썬 map 함수 원리, 예제 정리

jimmy_AI 2021. 12. 5. 15:10
반응형

파이썬 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 함수의 원리와 사용 예제에 대한 포스팅을 마치겠습니다. 감사합니다.