Python/파이썬 기초

파이썬 filter 함수 사용 예제 정리(lambda, def, 문자열 예시)

jimmy_AI 2022. 3. 5. 13:01
반응형

파이썬 filter 함수 사용법 경우의 수

파이썬 기본 내장 함수 중 하나인 filter 함수의 기본적인 구조는 다음과 같습니다.

 

filter(필터링 조건 함수(lambda 또는 def 정의), 필터링을 적용할 리스트 혹은 튜플 등 자료형)

 

filter 함수의 원리는 순회가능한 원소 각각필터링 조건을 검사하여

조건을 만족하는 원소들만 모아 결과를 반환하는 것입니다.

 

예제를 살펴보며 더 자세한 사용 방법을 익혀보도록 하겠습니다.

 

 

filter 함수 예제 1 : lambda를 이용한 필터링

가장 기본적인 람다 조건을 이용한 필터링의 경우를 살펴보겠습니다.

 

예를 들어, 정수로 구성된 리스트 원소들 중 4의 배수만을 골라서 반환하고 싶은 경우는

아래 예시 코드처럼 작성해주시면 됩니다.

# filter(람다 조건, 리스트)
filter(lambda x : x % 4 == 0, [12, 17, 9, 20, 14, 8])
# 결과 : <filter at 0x7f5d624b22d0>

참고로, filter 함수를 적용하여 반환된 결과를 리스트, 튜플 등 자료형으로 바꾸고 싶다면

아래처럼 자료형 변환을 시도해주시면 됩니다.

# 리스트, 튜플 자료형으로 필터링 결과 변환

list(filter(lambda x : x % 4 == 0, [12, 17, 9, 20, 14, 8])) # [12, 20, 8]
tuple(filter(lambda x : x % 4 == 0, [12, 17, 9, 20, 14, 8])) # (12, 20, 8)

4의 배수인 12, 20, 8만 모아서 결과가 반환된 모습을 살펴볼 수 있었습니다.

 

물론, filter 함수의 뒷 자리에 튜플, range 객체 등 순회가능한 다른 종류의 자료형도

input으로 받는 것이 가능합니다.

# range 객체 내 숫자들에서 홀수만 뽑는 필터링 과정

list(filter(lambda x : x % 2 == 1, range(10))) # [1, 3, 5, 7, 9]
반응형

filter 함수 예제 2 : def를 이용한 필터링

이번에는 조건 식 부분에 def를 이용한 필터링 예제에 대하여 살펴보겠습니다.

 

예를 들어, 10보다 크거나 같은 짝수 혹은 10보다 작은 홀수라는 복잡한 조건에 대한 필터링을

적용해보는 상황을 가정해보도록 하겠습니다.

 

이 경우, 아래와 같이 def 내에 조건을 만족하는 경우 True, 그렇지 않은 경우 False

반환하도록 함수를 정의해주고, 조건 식 부분에 해당 함수를 input으로 넣어주시면 됩니다.

def my_condition(x):
    if x >= 10: # 10보다 크거나 같은 수
        if x % 2 == 0: # 짝수
            return True
    else: # 10보다 작은 수
        if x % 2 == 1:
            return True
    return False # 모든 조건 불만족하는 경우

list(filter(my_condition, range(20))) # [1, 3, 5, 7, 9, 10, 12, 14, 16, 18]

range 객체의 0~19까지 수 중에서 10보다 작은 홀수와

10보다 크거나 같은 짝수들만 모아서 반환된 결과를 확인해볼 수 있었습니다.

 

 

filter 함수 예제 3 : 문자열 필터링

위의 예시들에서는 숫자 자료형 원소들에 대한 조건 검사를 진행하였습니다.

 

그러나 실제로 filter 함수를 적용할 수 있는 원소들의 자료형 종류에는 제한이 크게 없습니다.

여기서는 대표적인 다른 자료형 종류인 문자열에 대한 필터링 예제를 추가로 보도록 하겠습니다.

 

예를 들어, 단어 내에 'a'를 포함하는 문자열들만 고르고 싶은 상황을 살펴보도록 하겠습니다.

이 경우 아래 예시 코드처럼 filter 함수를 사용해주시면 됩니다.

list(filter(lambda x : 'a' in x, ['abc', 'bbb', 'cbc', 'aaa', 'cab'])) # ['abc', 'aaa', 'cab']

'a'가 포함된 문자열들만 모아서 결과가 반환된 모습을 살펴볼 수 있었습니다.

 

물론, 이 경우에도 def를 이용한 복잡한 조건의 필터링또한 역시 가능합니다.

'a'를 포함하지만 'b'는 포함하지 않는 경우의 필터링 예시 코드는 아래와 같습니다.

def my_condition(x):
    if ('a' in x) and ('b' not in x):
        return True
    else: return False

list(filter(my_condition, ['abc', 'bbb', 'acc', 'aaa', 'cab', 'ccb'])) # ['acc', 'aaa']