Python에서 filter() 함수를 사용하는 방법

Python의 filter() 함수를 사용하여 컬렉션에서 요소를 추출하는 방법을 알아보세요. 필터를 목록 이해 및 람다 콜백과 비교합니다.

Editor에서 이 솔루션을 사용해 보세요.

개요

데이터 필터링은 애플리케이션 프로그래밍의 핵심 작업입니다. 목록을 검색하여 프로필 데이터베이스에서 활성 사용자를 추출하거나 센서 로그에서 음수를 필터링하는 등 특정 기준을 충족하는 요소를 추출해야 하는 경우가 많습니다. Python은 이러한 목적으로 `filter()`라는 내장 기능 도구를 제공합니다.

`filter(function, iterable)` 함수는 필터링 함수와 iterable을 인수로 사용합니다. 함수 인수는 각 요소에 대해 부울 값(`True` 또는 `False`)을 반환해야 합니다. `filter()` 함수는 각 요소를 평가하여 `True`로 평가된 요소만 유지하고 결과가 포함된 반복자 객체(`filter` 객체)를 반환합니다.

`map()`과 마찬가지로 `filter()`는 요소를 느리게 평가합니다. 표준 목록이 즉시 필요한 경우 `list()` 생성자 `list(filter(func, data))`를 사용하여 출력을 캐스팅합니다. `None`을 함수 매개변수(예: `filter(None, data)`)로 전달하면 Python은 거짓인 모든 요소를 ​​자동으로 필터링합니다. 이는 빈 값을 지우는 데 매우 유용한 방법입니다.

코드 및 실행 출력

이 스크립트는 숫자 배열 필터링, 사전 항목 추출 및 filter()를 사용하여 잘못된 빈 문자열 삭제를 보여줍니다.

numbers = [-5, -2, 0, 3, 8, -1]

# 1. Filter positive numbers using a lambda function
positives = list(filter(lambda x: x > 0, numbers))
print("Positives only:", positives)

# 2. Filter list of strings by character length
words = ["cat", "elephant", "dog", "giraffe"]
long_words = list(filter(lambda w: len(w) > 4, words))
print("Words longer than 4 chars:", long_words)

# 3. Shorthand: Remove all falsy values from a list by passing None
mixed_data = ["hello", "", "world", None, False, "active"]
clean_data = list(filter(None, mixed_data))
print("Falsy values removed:", clean_data)
터미널 출력
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

단계별 구현

  • 요소를 받아들이고 필터 기준을 나타내는 부울 값을 반환하는 함수를 정의합니다.
  • 일치 항목의 지연 반복자를 생성하려면 filter(function, iterable)를 호출하세요.
  • 레코드를 조작해야 하는 경우 list(filter(...))를 사용하여 결과 필터 개체를 목록으로 캐스팅합니다.
  • None을 함수 인수로 전달하여 모든 잘못된 값(예: None, 0 및 빈 문자열)을 필터링합니다.

자주 묻는 질문

filter()에 전달된 함수가 부울 값을 반환하지 않으면 어떻게 되나요?

Python은 반환된 값의 진실성을 평가합니다. 부울 컨텍스트에서 값이 True로 평가되면 요소가 유지됩니다.

filter() 또는 목록 이해를 사용해야 합니까?

if 조건이 있는 목록 이해(예: [x for x in list if 조건])는 종종 가독성을 위해 선호되지만, filter()는 특히 기존 내장 함수를 사용할 때 깔끔하고 성능이 뛰어납니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.