Die Python-Funktion filter() erzeugt einen lazy Iterator, der ein Iterable durchläuft und nur die Elemente weitergibt, für die eine Filter-Funktion True zurückgibt. filter() ist eines der drei klassischen funktionalen Werkzeuge — neben map() und reduce() — und für viele Filter-Aufgaben oft kompakter als eine List-Comprehension, aber nicht immer lesbarer.

Einleitung

filter() gehört zu den drei klassischen funktionalen Werkzeugen Pythons — neben map() und reduce(). Es nimmt zwei Argumente: eine Filter-Funktion (Prädikat) und ein Iterable. Das Ergebnis ist ein neuer Iterator, der genau die Elemente liefert, für die das Prädikat einen wahrheitsähnlichen (truthy) Wert zurückgibt.

Wird None als Funktion übergeben, fungiert filter() als reiner Truthy-Filter: Alle Elemente, die als wahr gelten (also nicht 0, None, "", [], ...), werden behalten.

filter() ist lazy: Die Filter-Funktion wird erst dann auf ein Element angewendet, wenn der Iterator das nächste Element liefern soll. Das macht filter() sehr speicher-effizient — auch bei Millionen-Elementen oder unendlichen Generatoren.

Syntax

Python Syntax
filter(function, iterable)
Parameter
function

Eine Funktion, die ein Element nimmt und True (Element behalten) oder False (Element überspringen) zurückgibt. Wird None übergeben, werden alle truthy Elemente behalten.

iterable

Beliebige Iterable: Liste, Generator, Datei, Set usw.

Rückgabewert

Ein filter-Iterator. Lazy — wertet die Funktion erst aus, wenn das nächste Element abgefragt wird. Mit list() materialisierbar.

Beispiele

Mit benannter Funktion

Python Beispiel
def is_even(n):
    return n % 2 == 0

numbers = [1, 2, 3, 4, 5, 6]
even = list(filter(is_even, numbers))
print(even)
Output
[2, 4, 6]

Mit Lambda

Python Beispiel
words = ["Hallo", "", "Welt", None, "Python", ""]
nicht_leer = list(filter(lambda x: x, words))
print(nicht_leer)
Output
['Hallo', 'Welt', 'Python']

Mit None — alle truthy Elemente

Python Beispiel
values = [0, 1, "", "Text", None, [], [1, 2]]
truthy = list(filter(None, values))
print(truthy)
Output
[1, 'Text', [1, 2]]

filter vs. List-Comprehension

Python Beispiel
# filter:
even = list(filter(lambda n: n % 2 == 0, range(10)))

# List-Comprehension (oft lesbarer):
even = [n for n in range(10) if n % 2 == 0]

Praktische Beispiele

Gültige E-Mails aus einer Liste herausfischen

Python Beispiel
import re
input_value = ["info@mibeon.com", "unvalid", "michael@example.org", "@noch-falsch"]
pattern = re.compile(r"^[\w.+-]+@[\w-]+\.[\w.-]+$")
valid = list(filter(pattern.match, input_value))
print(valid)
Output
['info@mibeon.com', 'michael@example.org']

Datensätze nach Bedingung filtern

Python Beispiel
users = [
    {"name": "Alice", "alter": 17, "aktiv": True},
    {"name": "Bob",   "alter": 24, "aktiv": False},
    {"name": "Cleo",  "alter": 31, "aktiv": True},
]
erwachsen_aktiv = list(filter(
    lambda u: u["alter"] >= 18 and u["aktiv"],
    users,
))
for u in erwachsen_aktiv:
    print(u["name"])
Output
Cleo

filter() + map() kombinieren

Python Beispiel
numbers = range(1, 11)
# Quadrate aller geraden Zahlen
result = list(map(lambda n: n * n, filter(lambda n: n % 2 == 0, numbers)))
print(result)
Output
[4, 16, 36, 64, 100]

Praktische Hinweise

  • Lazy: Bei großen Iterables Speicher-effizient, weil Elemente nur on-demand erzeugt werden.
  • Mit None filtert filter() alle Falsy-Werte (0, "", None, [], ...).
  • List-Comprehensions sind oft lesbarer und werden in der Python-Community häufig bevorzugt.
  • Kombination mit map() ist klassisch funktional: list(map(func, filter(predicate, data))).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht