[Python 내장 함수] filter() : 특정 조건에 맞는 요소 찾기

 

 


1. filter함수란?

 

파이썬에서 제공하는 기본 내장 함수 중 하나인 filter() 함수는 주어진 반복 가능한 자료형(리스트, 튜플 등)에서 특정 조건에 맞는 요소만 골라내는 역할을 합니다. 이를 통해 더욱 효율적인 데이터 처리를 구현할 수 있습니다.

 

filter() 함수는 두 개의 인자를 받습니다. 첫 번째 인자로는 필터링 조건을 판별하는 함수가 들어가며, 두 번째 인자로는 반복 가능한(iterable) 객체가 들어갑니다.

 

filter() 함수는 주어진 함수를 반복 가능한 객체의 각 요소에 적용하며, 함수의 반환값이 True인 요소들만 걸러내어 반환합니다. 반환값은 filter 객체이며, 이를 list()나 tuple() 등을 사용해 원하는 형태로 변환할 수 있습니다.

 

filter(함수, 반복 가능한 객체)

 


아래 코드는 사용자 정의 함수 is_even()과 filter()를 이용해 numbers 리스트에서 짝수를 걸러내는 코드입니다.

 

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

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

even_numbers = filter(is_even, numbers)
print(list(even_numbers))  # 출력: [2, 4, 6, 8]

 


filter() 함수는 람다 함수를 함께 사용하여 더 간결한 코드를 작성할 수 있습니다. 

 

even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers))  # 출력: [2, 4, 6, 8]

 

 


filter()함수를 사용하면 문자열에서 특정 문자를 쉽게 제거할 수 있습니다.  여기서 ''.join은 문자열의 join메서드를 사용하여 시퀀스나 리스트의 요소들을 결합하여 하나의 문자열로 만드는 방법입니다.

 

text = "안녕하세요! 저는 파이썬을 배우고 있습니다."
filtered_text = ''.join(filter(lambda x: x != '!', text))

print(filtered_text)

 


filter함수와 사용자 정의 함수를 함께 사용하면 클래스 객체의 리스트에서 특정 속성을 기준으로 필터링할 수 있습니다.

 

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

people = [
    Person("김철수", 30),
    Person("박영희", 25),
    Person("이민수", 35),
    Person("최지영", 29)
]

def age_filter(person):
    return person.age >= 30

filtered_people = list(filter(age_filter, people))

for person in filtered_people:
    print(person.name, person.age)

 


2. 리스트 컴프리헨션과 비교

2.1 속도와 메모리 사용량의 차이

 

리스트 컴프리헨션은 간결한 코드로 필터링을 수행할 수 있지만, filter() 함수에 비해 속도가 느릴 수 있습니다. 하지만 이러한 속도 차이는 대부분의 경우 미미하여 큰 문제가 되지 않습니다. 메모리 사용량 면에서는 리스트 컴프리헨션과 filter() 함수 간에 큰 차이가 없습니다.

 


2.2 코드 가독성과 유지 보수성의 차이

 

코드 가독성과 유지 보수성 측면에서는 리스트 컴프리헨션과 filter() 함수 간에 주관적인 차이가 있을 수 있습니다. 리스트 컴프리헨션은 한 줄로 간결하게 작성할 수 있지만, 복잡한 조건이나 여러 조건이 필요한 경우에는 코드가 복잡해지고 가독성이 떨어질 수 있습니다. 이런 경우 filter() 함수를 사용하면 더 명확하게 코드의 의도를 전달할 수 있습니다.

 


3. filter() 함수의 주의사항 및 한계점

3.1파이썬 버전에 따른 차이점 주의

 

파이썬 2.x 버전에서는 filter() 함수가 결과를 리스트 형태로 반환하지만, 파이썬 3.x 버전에서는 filter 객체를 반환합니다. 따라서 파이썬 3.x 버전에서 filter() 함수를 사용할 때는 결과를 리스트로 변환해주어야 합니다.