python map, reduce, filter, zip built-in functions

python built-in functions : map / reduce / filter / zip

예전에 파이썬을 배웠을 때는 다 배웠었는데, 잘 안 사용하다가 사용법도 헷갈려서 참고차 정리해 보려고 한다!

notice

  • 이 예제들은 python 3.6.0을 기준으로 작성되었음
  • python 2의 경우에 몇 가지 주의할 점
    • list(map(…)), list(reduce(…))등을 쓸 필요 없이 바로 map(…), reduce(…)을 바로 list 타입으로 사용 가능
    • from functools import reduce 사용할 필요 없이 바로 reduce(…) 사용 가능

Map, reduce, filter

map

1
2
3
4
5
class map(object)
| map(func, *iterables) --> map object
|
| Make an iterator that computes the function using arguments from
| each of the iterables. Stops when the shortest iterable is exhausted.

map은 함수를 iterable한 list, tuple, set, dictionary 등에 대해서 원소별 결과를 모아서 return해준다. 따라서 function의 경우, input argument의 경우 1개인 함수만 사용 가능하다.

함수는 labmda를 사용하여 anonymous fucntion을 넘겨주어도 좋고, def를 사용해서 함수 변수를 사용해도 된다.

example

1
2
3
4
5
6
7
8
9
10
def square1(x):
return x**2
square2 = lambda x:x**2
arr = list(range(5))
list(map(lambda x:x**2, arr))
list(map(square1, arr))
list(map(square2, arr))
# [0, 1, 4, 9, 16]

reduce

1
2
3
4
5
reduce(...)
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.

reduce는 map과 달리 여러 iterable한 elem들을 한 개로 쭉 모아주는 역할을 수행할 수 있다. 2개씩 모아서 함수를 수행하므로, input argument가 2개인 함수만 사용이 가능하다.

예를 들어서 아래와 같이 * operator를 누적하면 factorial을 만든다던가, accumulated sum를 간단하게 구현할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
from functools import reduce
def fact(n):
return reduce(lambda x,y:x*y, range(1,n + 1))
def accSum(n):
return reduce(lambda x,y:x+y, range(1,n + 1))
print(fact(5))
# 120
print(accSum(10))
# 55

filter

zip, unzip

zip

unzip

Share Comments