본문 바로가기
IT/Python

Python map() 함수에 대해 공부해보자.

by Jason J 2018. 7. 26.
 파이썬은 여타 Low-Level 언어들과 달리 더 간결한 코드를 작성할 수 있는 것이 장점이다. 문제는 그런 코딩을 하기 위해서는 파이썬 존재하는 내장함수들을 많이 알고, 제대로 이해하는 것이 되겠다.

 코드를 간결하게 만들어주는 것들은 list comprehension, reduce, zip, lambda 등이 있지만 오늘은 map()함수에 대해서 공부해봐야겠다. 사실 간결하게 줄이기 위해서는 앞에 열거한 다른 것들과 함께 잘 사용할 때 효과가 극대화 된다고 볼 수 있겠다.


map(functioniterable...)

Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted

 공식 Python Documentation에 내장함수 중 map()에 관한 설명이다. 인수로 함수와 iterable한 리스트나 튜플을 주면 리스트나 튜플의 멤버값을 하나하나씩 함수에 적용시켜서 'map 오브젝트'로 반환해준다. (type() 함수로 직접 확인해보는 것도 좋다.) 예시를 보자.

1
2
3
4
numbers = [12345]
squared = []
for i in numbers:
    squared.append(i**2)
cs

리스트에 주어진 숫자들을 모두 제곱하려면 for문을 이용해 하나씩 제곱해주는 방법도 있지만..

1
2
3
4
5
def func(n):
    return n**2
 
numbers = [12345]
squared = list(map(func, numbers)) #[1,4,9,16,25]
cs

위와 같이 만들어진 함수와 map()함수를 이용할 수가 있다. 지금과 같은 경우는 인수로 들어가는 함수가 간단하니 lambda로 한 번 더 줄여주는 것이 좋겠다.

1
2
numbers = [12345]
squared = list(map(lambda x: x**2, numbers))
cs

훨씬 보기 좋아졌다. 이 정도만 기본적인 map() 함수의 사용법만 알아도 사용성이 매우 뛰어날 듯하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def add(x):
    return (x+x)
def multiply(x):
    return (x*x)
funcs = [add, multiply]
for i in range(3):
    value = list(map(lambda x: x(i), funcs))
    print(value)
 
"""
[0, 0]
[2, 1]
[4, 4]
"""
cs

 

 파이썬의 함수들은 First-class function이기 때문에 함수 자체를 인자로써 다른 함수에 전달하거나 return값으로 지정할 수 있다. 따라서 위와 같이 funcs 리스트에 함수 두 개를 넣은 후, lambda 함수의 인수 x로 funcs 리스트 안의 함수를 차례대로 전달해 줄 수 있다. 

 비교적 코드가 간단하게 구성되었지만 조금 더 복잡해 지는 경우에는 차라리 for문이나 if문으로 장황하게 쓰는게 맘 편할 때도 있지만, 파이썬을 좀 더 파이썬답게 사용하려면 익숙해지는 것이 좋겠다!


댓글