이번 게시글에서는 python
의 map
함수에 대해 공부한 내용을 정리해보겠습니다.
map
함수의 기본 문법은 아래와 같습니다.
map(function, iterable)
map
함수는 최소 두개(함수, 반복가능한 자료형)의 매개변수를 받습니다.
map
함수는 리스트와 같은 iterable
의 각 요소에 함수를 적용한 값들을 iterator
로 반환합니다.
참고로 iterator
는 list
와 같은 iterable
과 다릅니다. 따라서 list
로 출력이나 반환을 하고싶다면 꼭 list
를 사용하여 리스트 형식으로 변환하여야 합니다.
(iterator
에 관해선 다음 게시글을 통해 정리해보겠습니다.)
예를 들어 map(값을 제곱하는 함수, [1,2,3,4,5])
라고 코딩하면
map
함수는 각 list
의 요소에 값을 차례대로 제곱하여 반환합니다
아래에서 실제로 위의 가정를 예제로 만들어 보여드리겠습니다.
def square(x):
return x**2
odds = [1,3,5,7,9,11,13,15]
squared_odds = map(square, odds)
print(list(squared_odds))
#출력
[1, 9, 25, 49, 81, 121, 169, 225]
위 코드에서 map
함수는 인수값을 제곱하여 반환하는 함수인 square()
함수를 odds
리스트의 각 요소에 차례대로 적용합니다. 그러므로 squared_odds
는 odds
의 각 요소를 제곱한 값들을 가지게 됩니다. 이후 리스트 형식으로 변환하여 출력합니다.
map
함수는 iterable
객체를 여러 개 입력받는 것도 가능합니다.
map(function, iterable1, iterable2, ...)
예제로 알아보겠습니다. 아래 예제는 두 개의 list
값들을 서로 곱하는 예제입니다.
def time(x,y):
return x*y
num1 = [1,3,5,7,9,11,13,15]
num2 = [2,4,6,8,10,12,14,16]
timed_nums = map(time, num1, num2)
print(list(timed_nums))
#출력
[2, 12, 30, 56, 90, 132, 182, 240]
이처럼 map
함수는 여러 iterable
을 입력받아 사용 할 수도 있습니다.
이때 iterable
을 여러 개 map
함수에 사용 할 때는 가장 짧은 길이의 iterable
의 길이만큼 함수가 반복적으로 실행되는 것을 기억 해야 합니다.
map
함수는 함수인자로 lambda
도 사용이 가능합니다.
이는 일회성 함수를 map
에 적용하는 경우에 효율적을 사용이 가능할 것 같습니다.
num = [15,16,17,18,19]
def square(x):
return x**2
nolambda = map(square, num)
print("def :", list(nolambda))
yeslambda = map(lambda x: x**2, num)
print("lambde :",list(yeslambda))
#출력
def : [225, 256, 289, 324, 361]
lambde : [225, 256, 289, 324, 361]