파이썬의 filter() 함수는 별도로 정의한 필터 조건(함수)에 따라 리스트와 같은 시퀀스에서 특정 요소만 골라내는 내장 함수입니다. 먼저 어떤 기준으로 요소를 걸러낼지 판단하는 사용자 정의 함수를 만들고, 이 함수와 대상 리스트를 filter() 함수의 인자로 전달하면 조건을 통과한 결과를 얻을 수 있습니다.
기본 문법
filter(filter_function, sequence)
filter_function은 각 요소에 대해 True 또는 False를 반환하는 함수이며, sequence에는 리스트, 튜플 등 반복 가능한 객체가 들어갑니다. 참고로 파이썬 3에서 filter()는 필터 객체(iterator)를 반환하므로, 전체 목록이 필요하다면 list()로 감싸주면 됩니다.
예제 1: 짝수 제거하기
아래 예제에서는 리스트에서 짝수를 찾으면 False를 반환해 걸러내고, 나머지 홀수만 최종 결과에 남기는 함수를 만들어 보겠습니다. 이 함수를 살짝 수정하면 3이나 5로 나누어떨어지는 숫자를 필터링하는 것도 가능합니다.
num_list = [6, 17, 32, 11, 21, 132]
def remove_even(x):
if x % 2 == 0:
return False
else:
return True
odd_nos = filter(remove_even, num_list)
for x in odd_nos:
print(x)출력 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
17 11 21
예제 2: 모음만 추출하기
같은 방식으로 알파벳 리스트에서 모음(vowel)만 골라낼 수도 있습니다. 아래 코드는 각 문자가 모음인지 검사한 뒤, 모음일 경우 True를 반환하여 최종 리스트에 남깁니다.
letters = ['t', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's']
def get_vowels(c):
if c in ['a', 'e', 'i', 'o', 'u']:
return True
else:
return False
vowel_list = filter(get_vowels, letters)
for w in vowel_list:
print(w)출력 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
u o i a
마무리
이처럼 filter() 함수는 조건 판단 함수와 반복 가능한 객체만 있으면 복잡한 반복문 없이도 원하는 데이터를 손쉽게 추출할 수 있는 강력한 도구입니다. 실무에서는 위 예제의 조건 함수를 lambda x: x % 2 != 0 같은 람다 표현식으로 간결하게 작성하는 경우도 많으니 함께 익혀두면 유용합니다.