본문 바로가기
Programming/Python

파이썬 filter 함수를 알아보자

by 가우리언 2024. 11. 29.
728x90
반응형

 

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 이라는 리스트에서 짝수만 뽑아낸 [2, 4, 6, 8, 10] 리스트를 만들려고 합니다. 어떻게 하면 될까요? 우선, for 구문을 이용해서 할 수 있겠지요?

list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = []
for num in list_orig:
    if num % 2 == 0:
        list_result.append(num)
print(list_result)

 

이것을 filter 함수를 이용해서도 구현할 수 있는데요. 먼저 filter 함수는 어떤 형태로 사용하는지 봅시다.

filter(조건함수, 순회가능한객체)

조건함수는 걸러내기위한 조건을 담은 함수를 의미하고, 순회가능한객체는 리스트, 튜플 등이 해당된다.

일단 조건함수부터 구현해보자.

def is_even(num):
    return num % 2 == 0

이처럼 리턴값이 boolean 타입이어야 한다.

이제, 위의 조건함수과 함께 filter 함수를 사용해서 구현해보자.

list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = filter(is_even, list_orig)
print(type(list_result))

그런데, filter 함수가 리턴하는 값은 filter 객체이므로, list 내장함수로 filter객체를 리스트로 변환해주어야 한다.

list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = list(filter(is_even, list_orig))
print(list_result)

이렇게, 조작함수가 간단한 경우에는 lambda 함수로 작성하는 경우가 많다.

list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = list(filter(lambda num : num % 2 == 0, list_orig))
print(list_result)

이렇게 하면, for구문을 이용해서 구현한 것보다 라인수가 많이 줄어든 것을 알 수 있다.

 

참고로, 이 것을 또 다른 방법으로... 리스트 내포(list comprehesion) 구문을 이용해서도 가능하다.

list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = [num for num in list_orig if num % 2 == 0]
print(list_result)

 

lambda 함수와 리스트 내포에 대해서는 별도로 글을 남겼으니, 해당 글을 참고 바란다.

 

 

 

 

 

 

 

 

728x90
반응형