So verwenden Sie die Funktion filter() in Python

Erfahren Sie, wie Sie die Funktion filter() von Python verwenden, um Elemente aus Sammlungen zu extrahieren. Vergleichen Sie den Filter mit Listenverständnissen und Lambda-Rückrufen.

Probieren Sie diese Lösung im Editor aus

Übersicht

Die Datenfilterung ist eine Kernaufgabe in der Anwendungsprogrammierung. Sie müssen häufig eine Liste durchsuchen und Elemente extrahieren, die bestimmte Kriterien erfüllen, z. B. das Extrahieren aktiver Benutzer aus einer Profildatenbank oder das Herausfiltern negativer Zahlen aus Sensorprotokollen. Python stellt zu diesem Zweck ein integriertes Funktionstool namens „filter()“ zur Verfügung.

Die Funktion „filter(function, iterable)“ benötigt eine Filterfunktion und eine Iterable als Argumente. Das Funktionsargument muss für jedes Element einen booleschen Wert („True“ oder „False“) zurückgeben. Die Funktion „filter()“ wertet jedes Element aus, behält nur diejenigen bei, die als „True“ ausgewertet werden, und gibt ein Iteratorobjekt (ein „Filter“-Objekt) zurück, das die Ergebnisse enthält.

Wie „map()“ wertet „filter()“ Elemente langsam aus. Wenn Sie sofort eine Standardliste benötigen, wandeln Sie die Ausgabe mit dem Konstruktor „list()“ um: „list(filter(func, data))“. Wenn Sie „None“ als Funktionsparameter übergeben (z. B. „filter(None, data)“), filtert Python automatisch alle Elemente heraus, die falsch sind, was eine tolle Abkürzung zum Löschen leerer Werte ist.

Code- und Ausführungsausgabe

Dieses Skript demonstriert das Filtern numerischer Arrays, das Extrahieren von Wörterbuchelementen und das Verwerfen falscher leerer Zeichenfolgen mit filter().

filter_function.py
Versuchen Sie es im Editor
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)
Terminal-Ausgabe
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

Schrittweise Umsetzung

  • Definieren Sie eine Funktion, die ein Element akzeptiert und einen booleschen Wert zurückgibt, der die Filterkriterien darstellt.
  • Rufen Sie filter(function, iterable) auf, um einen Lazy-Iterator von Übereinstimmungen zu erstellen.
  • Wandeln Sie das resultierende Filterobjekt mit list(filter(...)) in eine Liste um, wenn Sie die Datensätze bearbeiten müssen.
  • Übergeben Sie None als Funktionsargument, um alle falschen Werte (wie None, 0 und leere Zeichenfolgen) herauszufiltern.

Häufig gestellte Fragen

Was passiert, wenn die an filter() übergebene Funktion keinen booleschen Wert zurückgibt?

Python bewertet die Wahrhaftigkeit des zurückgegebenen Werts. Wenn der Wert in einem booleschen Kontext „True“ ergibt, wird das Element beibehalten.

Sollte ich filter() oder ein Listenverständnis verwenden?

Ein Listenverständnis mit einer if-Bedingung (z. B. [x für x in der Liste if-Bedingung]) wird aus Gründen der Lesbarkeit oft bevorzugt, aber filter() ist sauber und hochleistungsfähig, insbesondere wenn vorhandene integrierte Funktionen verwendet werden.

Verwandte Themen

Empfohlene Python-Ressourcen

Erweitern Sie Ihr Wissen mit zugehörigen interaktiven Tutorials, Spickzetteln und Codevergleichen.