이번 포스트에서는 filter함수와 map함수에 대해서 알아보겠습니다.
filter, map함수의 이해
filter함수
어떤 iterable한 인스턴스에 대해 각 iteration원소가 function이라는 조건을 참으로 반환하는 원소만 다시 수집한 결과를 반환한다.
매개변수 | 설명 | 예제 |
function | 어떤 iterable과 iterables 매개변수를 사용해 각 iteration에 대해 function을 적용한다. 결과 값은 불리언과 연관된 값이 반환되어야 한다. result_element = function(next element of 'iterable') function매개변수 인자 인스턴스는 callable해야 한다. |
function = lambda x : x%2 flt = filter(function,range(10)) #flt is [1,3,5,7,9] |
iterable | iterable한 객체 인스턴스. |
map함수
어떤 iterable한 인스턴스들에 대해 function을 적용한 값들을 반환한다
매개변수 | 설명 |
function | 어떤 iterable과 iterables 매개변수를 사용해 각 iteration에 대해 function을 적용한다. function매개변수 인자 인스턴스는 callable해야 한다. result_element = function(iterable,*iterables) |
iterable | iterable한 객체 인스턴스. (최소 1개 이상의 iterable한 객체가 매개 변수 인자로 들어와야 해서 *iterables와 따로 분리) |
iterables* | 추가적인 iterable한 객체 인스턴스들. function(iterable,iterables[0],iterables[1],...) 같이 function에 들어갈 추가적인 가변 매개변수 인자를 담고 있다. |
코드 예제
#filter function example
rng = range(10)
filtered_rng = filter(lambda x: x%2,rng)
print("*"*3,"filter함수 예제","*"*3)
print(" 원래 값들:",*rng)
print(" 원래 값들의 홀수값들:",*filtered_rng)
print("\n"*3)
#map function examples
print("*"*3,"map함수 예제","*"*3)
rng1 = range(10)
rng2 = range(50,100)
rng3 = range(200,300)
print(" rng1 요소갯수:",len(rng1))
print(" rng2 요소갯수:",len(rng2))
print(" rng3 요소갯수:",len(rng3))
print(" min(len(rng1) ,len(rng2) ,len(rng3)):",min(len(rng1) ,len(rng2) ,len(rng3)))
print()
#map function example1
values = map(float,rng)
print(" 범위 값들을 실수형으로 변환된 값들:",*values)
print()
#map function example2
values = map(lambda x: 2*x if(x%3) else x,rng)
print(" 값이 이전에 3의 배수라면 그대로 가져오고 아니라면 해당값의 2배된 값을 출력하는 에제")
print(" 값들:",*values)
print()
#map function example3
from timeit import timeit
values = list(map(lambda *x: sum(x),rng1,rng2,rng3))
print(" 각 iterables 인스턴스들의 행값들을 더해서 반환해주는 예제")
print(" iteration걸린 시간:",timeit(lambda: list(map(lambda *x: sum(x),rng1,rng2,rng3)),number=1000))
print(" 같은결과 zip함수를 사용한 iteration걸린시간:",timeit(lambda: list(map(sum, zip(rng1,rng2,rng3))),number=1000))
print(" 값들:",*values)
print(" values 변수 요소 길이:",len(values))
print(" 각 행들을 더 한 값과 같은 값? ",all(map(lambda x1,x2: x1==x2,values,map(sum, zip(rng1,rng2,rng3)))))
print()

추가 사항
filter함수
- function함수의 결과값의 데이터 타입이 항상 정확히 불리언일 필요는 없고, 불리언 값으로 해석될 수 있는 값이면 된다.(e.g. 0,1)
- 'function' 매개변수 인자는 None 값이 들어와도 된다.(이 경우, 값이 0 이 아니거나 null instance(혹은 None) 가 아니면 참을 반환)
map함수
- map함수의 요소 갯수는 min([len(iterable),*map(len,iterables)])이다.
즉, 각 iterables 매개변수 인스턴스의 가장 적은 원소의 갯수가 함수 결과의 요소 갯수가 된다. - iterable매개변수와 *iterables는 사실상 *zip(iterable,*iterables) 값이 funcation함수의 매개변수 인자로 들어가는 것과 유사하다.
파이썬 enumerate, zip 함수 사용법
파이썬의 enumerate,zip 라는 어원에서 알 수 있듯이, enumerate 함수는 Iterator를 하나하나 열거(수를 세면서)하면서 각 원소들을 탐색하는 함수 zip함수는 여러 Iterator의 각 Iterator의 행(Row)들을 열(Column)
codevex.tistory.com
- itertools라는 기본 라이브러리를 사용하면 확장된 탐색,적용이 가능하다
'Program Languages > Python' 카테고리의 다른 글
파이썬 enumerate, zip 함수 사용법 (0) | 2023.01.10 |
---|---|
파이썬 iterable, iterator, generator에 대해 알아보자 (0) | 2023.01.09 |
파이썬에서 심플한 웹서버 작동시키기 (2) | 2023.01.06 |
파이썬 비트 연산자 사용법 (0) | 2023.01.06 |
파이썬 에러 핸들링 문법 사용법 (0) | 2023.01.04 |