본문 바로가기
Programming/Python

파이썬 map 함수를 알아보자

by 가우리언 2024. 11. 26.
728x90
반응형

 

리스트를 [1, 2, 3, 4, 5] --> [10, 20, 30, 40, 50] 과 같이 변환하려면 어떻게 할까? 먼저, 생각나는 것은 for 문을 사용해볼 수 있을 것이다.

list_orig = [1, 2, 3, 4, 5]
list_result = []
for num in list_orig:
    list_result.append(num * 10)
print(list_result)

이것을 map 함수로도 구현할 수 있는데, map 함수의 형식을 먼저 살펴보자.

map(조작함수, 순회가능한객체)

조작함수 부분은 위의 for 구문에서 num * 10 의 기능을 해주는 함수이고, 순회가능한객체는 리스트, 튜플 등이 해당된다.

일단 조작함수부터 구현해보자.

def mul_ten(num):
    return num * 10

 

이제, 위의 조작함수과 함께 map 함수를 사용해서 구현해보자.

list_orig = [1, 2, 3, 4, 5]
list_result = map(mul_ten, list_orig)
print(type(list_result))

그런데, map 함수가 리턴하는 값은 map 객체이므로, list 내장함수로 map객체를 리스트로 변환해주어야 한다.

list_orig = [1, 2, 3, 4, 5]
list_result = list(map(mul_ten, list_orig))
print(list_result)

이렇게, 조작함수가 간단한 경우에는 lambda 함수로 작성하는 경우가 많다.

list_orig = [1, 2, 3, 4, 5]
list_result = list(map(lambda num: num*10, list_orig))
print(list_result)

이렇게 하면, for구문을 이용해서 구현한 것보다 라인수가 많이 줄어든 것을 알 수 있다.

 

참고로, 이 것을 또 다른 방법으로... 리스트 내포(list comprehesion) 구문을 이용해서도 가능하다.

list_orig = [1, 2, 3, 4, 5]
list_result = [num* 10 for num in list_orig]
print(list_result)

 

lambda 함수와 리스트 내포에 대해서는 별도로 글을 남겼으니, 해당 글을 참고 바란다.

 

그리고, map 함수를 사용할때, 2개 이상의 리스트를 조작해서 새로운 리스트를 만들때에도 사용할 수 있다.

[1, 2, 3] 와 [4, 5, 6] 을 이용해서 각 항목을 더해서 [5, 7, 9] 리스트를 만들어낼 수 있다.

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list_result = list(map(lambda x, y: x + y, list1, list2))
print(list_result)

 

728x90
반응형