본문 바로가기
Python

[Python] 파이썬 filter() 함수 사용법 및 예제

by A6K 2022. 11. 8.

파이썬 filter() 함수는 파이썬의 튜플, 리스트, 문자열 같은 시퀀스 자료형에 사용할 수 있는 유용한 함수다. 시퀀스 자료형에 들어있는 엘리먼트들 중에 특정 함수를 적용해서 True가 리턴되는 엘리먼트들만 걸러서(filter) 가져오는데 사용된다.

파이썬 filter() 함수

filter() 함수는 다음과 같이 생겼다.

filter(함수, 시퀀스)

filter() 함수의 첫 번째 인자로는 함수가 온다. 두 번째 인자로는 리스트, 튜플, 문자열 같은 시퀀스 자료형의 객체가 온다. 시퀀스 자료형의 모든 엘리먼트에 함수를 적용하여 결과에 포함할지 여부를 결정한다. filter() 자체는 filter 객체를 리턴하기 대문에 해당 자료형을 list 혹은 tuple로 변환시켜줘야 한다.

예를 들어보자.

def is_even(a):
  if a % 2 == 0:
    return True
  return False
  
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_numbers = list(filter(is_even, numbers))
print(new_numbers)

# [2, 4, 6, 8, 10]

1부터 10까지 숫자를 담고 있는 numbers 리스트가 있다. 이 리스트에 filter() 함수를 이용해서 짝수인 엘리먼트만 뽑아오는 코드다. filter() 함수의 첫 번째 인자로 짝수인지를 확인하는 함수를 넣어줬다. filter() 함수는 numbers 리스트의 모든 엘리먼트를 돌면서 is_even() 함수를 적용해보고, True가 리턴되는 엘리먼트들만 뽑아서 결과로 가져왔다.

filter() 함수를 사용하지 않고 반복문을 이용해 동일한 동작을 구현하면 다음과 같다.

def is_even(a):
  if a % 2 == 0:
    return True
  return False
  
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_numbers = list()
for i in numbers:
  if is_even(i):
    new_numbers.append(i)
print(new_numbers)

# [2, 4, 6, 8, 10]

동작을 구현하기 위한 소스코드가 조금 더 길어졌다. 시퀀스 자료형에 있는 엘리먼트들 중에 특정 조건을 만족하는 엘리먼트만 뽑아오는 작업은 매우 흔한 작업이다. 이런 패턴으로 사용되는 코드는 filter() 함수를 이용해서 좀 더 짧고 간결하게 구현할 수 있다.

람다 함수와 filter()

파이썬 filter() 함수는 람다 함수와 함께 사용되는 경우가 많다. 람다 함수는 익명함수(Anonymous function)을 의미한다. 람다함수도 함수이므로 filter() 함수와 함께 사용할 수 있다.

위 예제를 람다함수를 이용해서 다시 작성해보자.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_numbers = list(filter(lambda a : a % 2 == 0, numbers))
print(new_numbers)

# [2, 4, 6, 8, 10]

is_even() 함수를 람다 함수로 대체했다. filter() 함수의 인자로 넘겨줄 함수가 is_even() 함수의 내용처럼 매우 짧거나 간단한 경우 그리고 재사용을 할 필요가 없는 경우에는 람다 함수를 이용하는게 좀 더 효율적이다.


 

파이썬 스크립트 작성에 도움되는 글 모음

파이썬으로 프로그램을 작성할 때 도움되는 글들을 모아본다. 개발환경 [Python] macOS에 파이참 설치 [Python] 파이참 깃허브 연동 [Python] 파이썬 PIP란? [Python] VSCode를 이용한 개발환경 [Python] python3를

hbase.tistory.com

 

댓글