파이썬으로 개발을 하다 보면 두 개의 리스트를 다루면서, 작은 리스트에 있는 각 항목이 큰 리스트에 존재하는지 확인해야 하는 상황이 자주 발생합니다. 이럴 때 내장 함수인 filter()를 사용하면 원하는 조건에 맞는 요소만 손쉽게 걸러낼 수 있습니다. 이 글에서는 filter() 함수의 기본 문법과 실전 예제를 통해 활용 방법을 자세히 알아보겠습니다.
filter() 함수 기본 문법
filter(function_name, sequence)
function_name은 필터링 기준을 담고 있는 함수의 이름입니다. 이 함수는 시퀀스의 각 요소를 하나씩 평가하여 True 또는 False를 반환해야 합니다. sequence는 필터링 대상이 되는 시퀀스로, 리스트(list), 튜플(tuple), 세트(set) 등 반복 가능한(iterable) 객체라면 무엇이든 사용할 수 있습니다.
filter() 함수는 조건 함수가 True를 반환한 요소들만 모아 필터 객체(filter object)를 반환합니다. 이 객체는 이터레이터이므로 for 루프로 순회하거나, list()나 tuple()로 변환해서 사용할 수 있다는 점을 기억해 두면 좋습니다.
예제
다음 예제에서는 여러 월 이름이 담긴 큰 리스트에서, 기준 목록에 포함된 특정 월만 골라내는 과정을 살펴봅니다. 먼저 기준이 되는 작은 리스트를 만든 뒤, 그 안에 해당 월이 존재하는지 검사하는 함수를 정의하고 filter() 함수를 적용합니다.
# 월 이름이 담긴 리스트
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']
# 특정 월만 걸러내는 함수
def filterMonths(month):
targetMonths = ['Apr', 'Jun', 'Aug', 'Oct']
if month in targetMonths:
return True
else:
return False
filtered_months = filter(filterMonths, months)
print('필터링된 월 :')
for month in filtered_months:
print(month)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 큰 리스트에는 'Oct'가 없기 때문에 기준 목록 중 실제로 매칭되는 세 개의 월만 출력됩니다.
필터링된 월 : Apr Jun Aug
람다 표현식으로 더 간결하게 작성하기
조건이 단순하다면 별도의 함수를 정의하지 않고 람다(lambda) 표현식을 활용해 한 줄로 처리할 수도 있습니다.
filtered_months = filter(lambda m: m in ['Apr', 'Jun', 'Aug', 'Oct'], months) print(list(filtered_months)) # ['Apr', 'Jun', 'Aug']
이처럼 filter() 함수는 리스트 컴프리헨션과 함께 파이썬에서 데이터를 걸러낼 때 가장 널리 쓰이는 도구 중 하나입니다. 반복문과 조건문을 직접 작성하는 것보다 코드가 간결해지고 의도가 명확하게 드러난다는 장점이 있으니, 상황에 맞게 적극적으로 활용해 보시기 바랍니다.