filter( ) 함수, map( ) 함수
두 함수를 보기전에 콜백 함수라는 것이 있습니다. 콜백 함수는 다른 함수에 인수로 전달되어 그 함수에 의해 호출되는 함수입니다. 쉽게 말해 함수의 매개변수에 사용하는 함수를 콜백 함수라고 합니다.
그럼 콜백함수를 사용하는 대표적인 함수를 살펴보겠습니다.
map( ) 함수
먼저 map( ) 함수는 리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 만들어 주는 함수입니다.
map(함수, 리스트)
이런 형태로 되어있습니다.
간단한 예시를 한번 들어보겠습니다.
def mul(item):
return item ** 2
list_input_a = [1,2,3,4,5]
위 처럼 값을 제곱해주는 함수와 리스트가 있습니다. map( ) 함수를 사용해보겠습니다.
print((map(mul, list_input_a)))
이런 결과가 나오게 되는데 이를 제너레이터라 합니다. 일단 list( )함수를 이용해 자료형으로 변환해 출력해보겠습니다.
print(list(map(mul, list_input_a)))
이렇게 리스트의 값들을 함수에 넣고 리턴해 리스트로 구성되 나왔습니다。
그럼 한번 map( ) 함수를 구현해보겠습니다.
def my_map(콜백함수, 리스트):
output = []
for i in 리스트:
output.append(콜백함수(i))
return output
print(my_map(mul, list_input_a))
my_map이란 함수를 만들고 매개변수로 콜백함수와 리스트를 넣습니다. 그리고 output이라는 빈 리스트를 넣고 매개변수로 받은 리스트를 반복하여 콜백함수에 넣은 값을 빈 리스트에 추가했습니다. 결과는 다음과 같이 잘 나온것을 볼 수 있습니다.
filter( ) 함수
다음은 filter( ) 함수입니다. filter( ) 함수는 리스트 요소를 함수에 넣고 리턴된 값이 True인 것으로, 새로운 리스트를 구성해주는 함수입니다.
def odd(item):
if item % 2 == 1:
return True
else:
return False
다음과 같이 홀수를 참으로 하는 함수 odd를 만들었습니다. 이제 앞에 사용했던 리스트로 filter( ) 함수를 이용해서 조건에 맞는 새로운 값들만 모아보겠습니다.
print(list(filter(odd, list_input_a)))
홀수인 값들만 뽑아져 나온 것을 볼 수 있습니다. 그럼 filter( ) 함수 역시 구현을 해보겠습니다.
def my_filter(콜백함수, 리스트):
output = []
for i in 리스트:
if 콜백함수(i) == True:
output.append(i)
else:
continue
return output
my_filter(odd, list_input_a)
my_filter라는 함수의 매개변수에 사용할 함수와 리스트를 넣습니다. 그 후 빈 output 리스트를 만들고 사용할 리스트를 반복하는데 그중 콜백함수에 넣어서 참인 것들만 output에 추가하고 나머지는 무시했습니다. 결과는 다음처럼 잘 나온 것을 볼 수 있습니다.