파이썬 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']
'Python > 파이썬 기초' 카테고리의 다른 글
파이썬 assert 사용법, 사용 이유 정리 (0) | 2022.03.15 |
---|---|
파이썬 import와 from import의 사용 방법 비교, 구분 이유 (4) | 2022.02.23 |
파이썬 딕셔너리 value, key로 정렬, 내부 리스트 정렬 예제 (4) | 2022.02.23 |