Jak korzystać z funkcji filter() w Pythonie

Dowiedz się, jak używać funkcji filter() języka Python do wyodrębniania elementów z kolekcji. Porównaj filtr ze wyrażeniami listowymi i wywołaniami zwrotnymi lambda.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Filtrowanie danych jest podstawowym zadaniem w programowaniu aplikacji. Często będziesz musiał przeszukać listę i wyodrębnić elementy spełniające określone kryteria, na przykład wyodrębnić aktywnych użytkowników z bazy danych profili lub odfiltrować liczby ujemne z dzienników czujników. W tym celu Python udostępnia wbudowane narzędzie funkcjonalne o nazwie `filter()`.

Funkcja `filter(funkcja, iterowalna)` przyjmuje jako argumenty funkcję filtrującą i wartość iterowalną. Argument funkcji musi zwracać wartość logiczną („True” lub „False”) dla każdego elementu. Funkcja `filter()` ocenia każdy element, zachowując tylko te, które mają wartość `True` i zwraca obiekt iteratora (obiekt `filter`) zawierający wyniki.

Podobnie jak `map()`, `filter()` ocenia elementy leniwie. Jeśli potrzebujesz natychmiast standardowej listy, rzutujesz dane wyjściowe za pomocą konstruktora `list()`: `list(filter(func, data))`. Jeśli jako parametr funkcji przekażesz wartość „None” (np. „filter(Brak, dane)”), Python automatycznie odfiltruje wszystkie elementy, które są fałszywe, co jest doskonałym skrótem do czyszczenia pustych wartości.

Dane wyjściowe kodu i wykonania

Ten skrypt demonstruje filtrowanie tablic numerycznych, wyodrębnianie elementów ze słownika i odrzucanie fałszywych pustych ciągów za pomocą funkcji filter().

filter_function.py
Spróbuj w Edytorze
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)
Wyjście terminala
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

Wdrażanie krok po kroku

  • Zdefiniuj funkcję, która akceptuje element i zwraca wartość logiczną reprezentującą kryteria filtru.
  • Wywołaj filter(funkcja, iterowalna), aby utworzyć leniwy iterator dopasowań.
  • Rzuć wynikowy obiekt filtru na listę za pomocą list(filter(...)), jeśli chcesz manipulować rekordami.
  • Przekaż Brak jako argument funkcji, aby odfiltrować wszystkie fałszywe wartości (takie jak Brak, 0 i puste ciągi).

Często zadawane pytania

Co się stanie, jeśli funkcja przekazana do filter() nie zwróci wartości logicznej?

Python ocenia prawdziwość zwracanej wartości. Jeśli wartość ma wartość True w kontekście boolowskim, element zostaje zachowany.

Czy powinienem używać filter() czy ze zrozumieniem listy?

Często preferowane jest rozumienie listy z warunkiem if (np. [x dla x na liście warunku if]) ze względu na czytelność, ale funkcja filter() jest czysta i bardzo wydajna, szczególnie w przypadku korzystania z istniejących funkcji wbudowanych.

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.