본문으로 바로가기

[Python]파이썬 맵,필터,리듀스(map,filter,reduce)

category Python 2019. 2. 22. 21:00

파이썬에서 리스트의 결과를 특정 조건에따라 원소별로 변환하거나, 필터를 사요해 걸러내거나, 연산하는방법으로 


맵,필터,리듀스 를 사용가능하다.


이 세가지 클래스는 함수를 매개변수로 받아 결과를 반환하는데, 이때 람다함수(lambda)를 자주 사용한다.

https://dpdpwl.tistory.com/87

(람다함수를 이용하는방법)


맵과 필터는 반환타입이 맵과 필터로 return 되며, 리듀스는 함수결과의 타입으로 return한다.



TEST LIST


= list(range(1,11))
print(l)
 
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
cs

1부터 10까지 들어있는 리스트로 맵과 필터, 리듀스를 각각 테스트 해보겠습니다.



맵(map)


맵은 리스트의 원소를 원하는 방식으로 변환 할 때 쓰인다.


맵은 함수를 매개변수로 받아 함수내에서 정의하는 연산을 각 원소에 반영시킨다.

def funcMap(n):
    return n*n
 
= list(map(funcMap, l))
print(m)
 
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
cs


제곱하는 함수인 funcMap 함수를 map에 리스트와 같이 넘겨주면 리스트의 각 원소를 제곱하여 리턴한다.


리턴타입이 map으로 오기때문에 list로 다시 변환해준다.



필터(filter)


필터는 리스트의 원소를 조건에따라 필터링 할 떄 쓰인다.


필터를 적용할 함수를 매개변수로 받아 함수내에서 정의된 조건을 각 원소에 반영하여 필터링한다.

def funcFilter(n):
    return n%2==0
 
= list(filter(funcFilter, l))
print(f)
 
# [2, 4, 6, 8, 10]
cs

2로 나누어떨어지는 수만 골라내여 리턴하는 함수인 funcFilter 를 리스트와함께 filter클래스에 넘겨주면 필터링된 결과를 리턴받을 수 있다.


마찬가지로 리턴타입은 filter클래스이기때문에 list로 변환하여 출력한다.



리듀스(reduce)


리듀스는 리스트의 각원소를 순차적으로 함수에 정의된 연산을 해준다.


리듀스는 functools모듈안에 있으므로 import를 받아와야 사용 가능하다.

from functools import reduce 
cs


테스트 리스트를 이용하여 팩토리얼을 구현 할 수 있다.

def funcReduce(n,m):
    return n*m
 
= reduce(funcReduce, l)
print(r)
 
# 3628800
cs


리스트 첫번째 원소부터 그다음원소를 funcReduce에서 정의된 연산을 수행한다.


수행된 결과를 다음번 원소와 연산하여 리스트의 끝까지 수행한뒤 결과를 리턴한다.


리턴타입은 연산결과에 따라 정해진다.