Lerne, wie du die filter()-Funktion von Python nutzt, um Elemente aus Listen oder anderen Iterablen zu extrahieren. Verstehe die wichtigsten Unterschiede zwischen Filtern und ähnlichen Python-Tools.
Filtern ist eine der häufigsten Aufgaben in Python, deshalb macht Python es dir leicht. Eine der einfachsten Möglichkeiten, Daten zu filtern, ist die eingebaute Funktion filter(). Wie der Name schon sagt, kannst du mit filter() nur die Artikel herausziehen, die eine bestimmte Bedingung (oder Bedingungen) erfüllen.
In diesem Leitfaden erfährst du, wie sie funktioniert, wann du sie einsetzen solltest und wie sie im Vergleich zu anderen Filterwerkzeugen funktioniert. Lies mal!
Was Python filter() macht
filter() kannst du Elemente aus einer Liste, einem Tupel oder einer beliebigen Iterablen herausziehen, aber nur, wenn sie deinen Test bestehen. Du gibst eine Funktion an (manchmal wird sie auch Prädikat genannt), die jedes Element aufnimmt und True oder False zurückgibt. Wenn der Test bestanden wird (sprich: wenn deine Funktion True zurückgibt), behält filter() sie. Andernfalls wird das Element übersprungen. Das ist ziemlich selbsterklärend, also lass uns weitermachen.
function: Legt die Prüfung fest, die du auf jedes Element anwenden willst. Sie sollte ein Argument annehmen und True oder False zurückgeben.
iterable: Liefert eine Liste, ein Tupel, einen String oder ein beliebiges Objekt, über das du eine Schleife ziehen kannst.
Wenn du filter() aufrufst, wird ein spezielles Filterobjekt zurückgegeben, nicht direkt eine Liste oder ein Tupel. Um mit den gefilterten Ergebnissen zu arbeiten, verpackst du die Ausgabe normalerweise in eine Liste oder ein Tupel. Diese Entscheidung sorgt dafür, dass filter() effizient bleibt, aber es ist etwas, das du beim Schreiben deines Codes im Hinterkopf behalten solltest.
Python filter() Beispiele
Lass uns ein bisschen üben.
Python filter() mit einer eigenen Funktion
Verwenden wir filter() mit einer Funktion, die wir für uns selbst schreiben.
Angenommen, du willst nur die geraden Zahlen aus einer Liste behalten:
defis_even(num):return num %2==0
numbers =[1,2,3,4,5,6]
result =filter(is_even, numbers)print(list(result))Bereitgestellt von
Beachte, wie is_even prüft, ob eine Zahl durch 2 teilbar ist. filter() nutzt unsere benutzerdefinierte Funktion, um jedes Element zu testen und die zu behalten, die unseren Test bestehen.
Python filter() mit Lambda-Funktionen
Natürlich braucht nicht jeder Filter eine vollständige Funktionsdefinition. Manchmal ist deine Filterregel so einfach oder so spezifisch für eine Stelle, dass die Definition einer benannten Funktion zu viel Arbeit ist.
Hier ist dasselbe Beispiel mit geraden Zahlen, aber mit einem Lambda für einen präzisen In-Place-Test:
numbers =[1,2,3,4,5,6]
result =filter(lambda x: x %2==0, numbers)print(list(result))Bereitgestellt von
Du erhältst die gleiche Ausgabe wie zuvor.
Die Verwendung von Lambdas mit filter() ist besonders dann üblich, wenn du deinen Code kurz und konzentriert halten willst. Sie eignet sich hervorragend für einmalige Filteraufgaben, denn so kannst du deine Regel genau dort ausdrücken, wo du sie brauchst.
Python filter() mit None als Funktion
Manchmal möchtest du filter() leere oder falsche Werte ausschließen. Dinge wie 0, leere Zeichenketten, None oder False, und wir wollen das tun, ohne eine eigene Funktion zu schreiben.
Python hat dafür einen Trick: Wenn du das Funktionsargument in filter() auf None setzt, entfernt filter() automatisch alle Elemente, die Python als False betrachtet.
Hier ist ein Beispiel:
items =[0,1,'','hello',[],[2,3],None,False,True]
result =filter(None, items)print(list(result))Bereitgestellt von
Jetzt wollen wir filter() auf ein praktisches, alltägliches Problem anwenden. Angenommen, du hast eine Liste von Wörtern und willst nur die, die mit "a" beginnen. Diese Art des gezielten Filterns kommt bei der Textverarbeitung immer wieder vor.
words =['apple','banana','apricot','cherry','avocado']
result =filter(lambda word: word.startswith('a'), words)print(list(result))Bereitgestellt von
Manchmal werden deine Filterkriterien etwas komplexer. Was ist, wenn du Gegenstände brauchst, die mehrere Bedingungen erfüllen? Hier siehst du, wie du das mit einem Lambda machen kannst. In diesem Beispiel geht es darum, Zahlen zu finden, die gerade und größer als 10 sind.
numbers =[4,10,12,15,20,23,28]
result =filter(lambda x: x %2==0and x >10, numbers)print(list(result))Bereitgestellt von
Sowohl filter() als auch List Comprehensions erledigen die Arbeit. Listen sind bei einfachen Filtern oft leichter zu lesen, besonders wenn die Regel kurz und einfach ist.
Auf der anderen Seite funktioniert filter() gut, wenn du bereits mit Funktionen arbeitest oder wenn du mehrere Verarbeitungsschritte miteinander verketten willst.
Erweiterte Einsatzmöglichkeiten
Lass uns versuchen, noch ein paar interessante Fälle zu finden:
filter() mit anderen Iterablen
So wie wir es mit Listen gemacht haben, funktioniert filter() auch mit allen iterierbaren Größen, wie Tupeln, Mengen und sogar Generatorausdrücken. Das ist gut zu wissen, denn deine Daten werden nicht immer in Listenform vorliegen.
Hier siehst du, wie du ein Tupel filtern kannst:
numbers =(10,15,20,25,30)
result =filter(lambda x: x >20, numbers)print(tuple(result))Bereitgestellt von
Vergiss nicht, das Filterobjekt in den gewünschten Typ (Liste, Tupel usw.) umzuwandeln, wenn du die Ergebnisse direkt verwenden willst.
Da ich auch Generatoren erwähnt habe, zeige ich der Vollständigkeit halber auch ein Beispiel für das Filtern mit Generatoren:
numbers =(x for x inrange(10))
result =filter(lambda x: x %2==0, numbers)print(list(result))Bereitgestellt von
Dies ist ein Generator, denn diese Zeile: numbers = (x for x in range(10)) erzeugt ein Generator-Objekt. (Es ist faul und generiert nicht alle Werte auf einmal).
Die letzte Zeile: print(list(result)) erzwingt die Auswertung, indem sie das Lazy-Filter-Objekt in eine Liste umwandelt.
Kombination von filter() mit map()
Was ist, wenn du deine Daten sowohl filtern als auch umwandeln willst, z. B. wenn du in unserem nächsten Beispiel nur die geraden Zahlen in einer Liste quadrieren willst?
Python macht es dir leicht, indem es dir erlaubt, filter() und map() zu kombinieren. Zuerst wählt filter() die gewünschten Artikel aus und dann wendet map() eine andere Funktion auf jeden einzelnen an.
So sieht das in der Praxis aus:
numbers =[1,2,3,4,5,6]
evens =filter(lambda x: x %2==0, numbers)
squared =map(lambda x: x **2, evens)print(list(squared))Bereitgestellt von
Durch die Verkettung von filter() und map() kannst du übersichtliche, lesbare Datenpipelines erstellen, indem du zuerst die Elemente auswählst, die dich interessieren, und sie dann nach Bedarf umwandelst. Es wird Möglichkeiten geben, dieses Muster in deiner eigenen Arbeit zu verwenden.
Dinge, auf die du achten solltest
So praktisch filter() auch ist, es gibt ein paar Fehler, die Menschen machen:
filter() gibt ein Filterobjekt zurück, keine Liste. Das kann dich aus dem Konzept bringen, wenn du erwartest, dass du sofort Ergebnisse siehst. Schließe sie immer in eine Liste (oder ein Tupel) ein, wenn du die Ergebnisse sehen oder wiederverwenden willst.
filter() funktioniert immer nur mit einer Iterablen zur gleichen Zeit. Wenn du nach mehreren Listen filtern willst, musst du sie zusammenfassen oder eine andere Methode verwenden.
filter() ist faul. Die Daten werden erst dann verarbeitet, wenn du sie in eine Liste oder ein Tupel umwandelst oder eine Schleife über sie ziehst. Behalte dieses Verhalten beim Debuggen im Hinterkopf.
Fazit
Wie du gesehen hast, kannst du mit der Funktion filter() in Python schnell Daten bereinigen, indem du nur das herausziehst, was wichtig ist. filter() hilft dir, wenn du ein einmaliges Lambda schreibst oder eine benannte Funktion einfügst.
Wenn dir nicht klar ist, wie du filter() nutzen kannst, oder wenn du denkst, dass das einfach genug war und du weiter lernen willst, haben wir tolle Ressourcen, die dir helfen. Ich empfehle unseren LernpfadPython Programming Fundamentals.
Autor
Josef Waples
Python Filter FAQs
Was macht die Python-Funktion filter()?⌄
Die Funktion filter() nimmt eine Funktion und eine Iterable und gibt eine neue Iterable zurück, die nur die Elemente enthält, die einen Test bestehen. Die Testfunktion sollte True für Artikel zurückgeben, die du behalten willst, und False für solche, die du auslassen willst.
Warum muss ich das Ergebnis von filter() in list() oder tuple() verpacken?⌄
filter() gibt ein Filterobjekt zurück, das ein Iterator ist. Um die gefilterten Ergebnisse anzuzeigen oder wiederzuverwenden, wirst du sie normalerweise mit list() oder tuple() in eine Liste oder ein Tupel umwandeln. Dieser Schritt ist wichtig, um das Ergebnis zu drucken, zu debuggen oder an andere Funktionen zu übergeben.
Kann ich filter() verwenden, ohne eine eigene Funktion zu schreiben?⌄
Ja. Du kannst eine Lambda-Funktion für kurze, einmalige Tests verwenden oder None als Funktionsargument übergeben, um automatisch alle "falschen" Werte wie 0, '', None und False zu entfernen.
Wie verhält sich filter() im Vergleich zu List Comprehensions?⌄
Sowohl filter() als auch List Comprehensions ermöglichen es dir, Daten zu filtern, aber List Comprehensions sind für einfache Bedingungen oft besser lesbar. filter() ist nützlich, wenn du Logik über Funktionen wiederverwendest oder mit Tools wie map() verkettest.
Kann ich mit filter() mehrere Bedingungen anwenden?⌄
Auf jeden Fall. Du kannst mehrere Bedingungen mit logischen Operatoren innerhalb deiner Testfunktion oder deines Lambdas kombinieren. Für komplexe Logik ist es oft besser, eine benannte Funktion zu verwenden, damit der Code lesbar bleibt.
Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Filtern ist eine der häufigsten Aufgaben in Python, deshalb macht Python es dir leicht. Eine der einfachsten Möglichkeiten, Daten zu filtern, ist die eingebaute Funktion
filter(). Wie der Name schon sagt, kannst du mitfilter()nur die Artikel herausziehen, die eine bestimmte Bedingung (oder Bedingungen) erfüllen.In diesem Leitfaden erfährst du, wie sie funktioniert, wann du sie einsetzen solltest und wie sie im Vergleich zu anderen Filterwerkzeugen funktioniert. Lies mal!
Was Python filter() macht
filter()kannst du Elemente aus einer Liste, einem Tupel oder einer beliebigen Iterablen herausziehen, aber nur, wenn sie deinen Test bestehen. Du gibst eine Funktion an (manchmal wird sie auch Prädikat genannt), die jedes Element aufnimmt undTrueoderFalsezurückgibt. Wenn der Test bestanden wird (sprich: wenn deine FunktionTruezurückgibt), behältfilter()sie. Andernfalls wird das Element übersprungen. Das ist ziemlich selbsterklärend, also lass uns weitermachen.Python filter() Syntax
Hier ist das Format:
function: Legt die Prüfung fest, die du auf jedes Element anwenden willst. Sie sollte ein Argument annehmen undTrueoderFalsezurückgeben.iterable: Liefert eine Liste, ein Tupel, einen String oder ein beliebiges Objekt, über das du eine Schleife ziehen kannst.Wenn du
filter()aufrufst, wird ein spezielles Filterobjekt zurückgegeben, nicht direkt eine Liste oder ein Tupel. Um mit den gefilterten Ergebnissen zu arbeiten, verpackst du die Ausgabe normalerweise in eine Liste oder ein Tupel. Diese Entscheidung sorgt dafür, dassfilter()effizient bleibt, aber es ist etwas, das du beim Schreiben deines Codes im Hinterkopf behalten solltest.Python filter() Beispiele
Lass uns ein bisschen üben.
Python filter() mit einer eigenen Funktion
Verwenden wir
filter()mit einer Funktion, die wir für uns selbst schreiben.Angenommen, du willst nur die geraden Zahlen aus einer Liste behalten:
Dies wird gedruckt:
Beachte, wie
is_evenprüft, ob eine Zahl durch 2 teilbar ist.filter()nutzt unsere benutzerdefinierte Funktion, um jedes Element zu testen und die zu behalten, die unseren Test bestehen.Python filter() mit Lambda-Funktionen
Natürlich braucht nicht jeder Filter eine vollständige Funktionsdefinition. Manchmal ist deine Filterregel so einfach oder so spezifisch für eine Stelle, dass die Definition einer benannten Funktion zu viel Arbeit ist.
Hier ist dasselbe Beispiel mit geraden Zahlen, aber mit einem Lambda für einen präzisen In-Place-Test:
Du erhältst die gleiche Ausgabe wie zuvor.
Die Verwendung von Lambdas mit
filter()ist besonders dann üblich, wenn du deinen Code kurz und konzentriert halten willst. Sie eignet sich hervorragend für einmalige Filteraufgaben, denn so kannst du deine Regel genau dort ausdrücken, wo du sie brauchst.Python filter() mit None als Funktion
Manchmal möchtest du
filter()leere oder falsche Werte ausschließen. Dinge wie0, leere Zeichenketten,NoneoderFalse, und wir wollen das tun, ohne eine eigene Funktion zu schreiben.Python hat dafür einen Trick: Wenn du das Funktionsargument in
filter()aufNonesetzt, entferntfilter()automatisch alle Elemente, die Python alsFalsebetrachtet.Hier ist ein Beispiel:
Dies wird gedruckt:
Textdaten filtern
Jetzt wollen wir
filter()auf ein praktisches, alltägliches Problem anwenden. Angenommen, du hast eine Liste von Wörtern und willst nur die, die mit "a" beginnen. Diese Art des gezielten Filterns kommt bei der Textverarbeitung immer wieder vor.Du bekommst:
Filtern mit mehreren Bedingungen
Manchmal werden deine Filterkriterien etwas komplexer. Was ist, wenn du Gegenstände brauchst, die mehrere Bedingungen erfüllen? Hier siehst du, wie du das mit einem Lambda machen kannst. In diesem Beispiel geht es darum, Zahlen zu finden, die gerade und größer als 10 sind.
Dies druckt:
(Wenn ich noch mehr Bedingungen hätte, würde ich der Übersichtlichkeit halber von einem Lambda zu einer benannten Funktion wechseln).
filter() vs. Liste Verstehen
Listen sind eine weitere beliebte Methode, um Elemente auszuwählen. Mit beiden Ansätzen kannst du Daten filtern, aber jeder hat seinen eigenen Stil.
Hier ist wieder das Beispiel mit den geraden Zahlen, diesmal mit einem Listenverständnis:
Sowohl
filter()als auch List Comprehensions erledigen die Arbeit. Listen sind bei einfachen Filtern oft leichter zu lesen, besonders wenn die Regel kurz und einfach ist.Auf der anderen Seite funktioniert
filter()gut, wenn du bereits mit Funktionen arbeitest oder wenn du mehrere Verarbeitungsschritte miteinander verketten willst.Erweiterte Einsatzmöglichkeiten
Lass uns versuchen, noch ein paar interessante Fälle zu finden:
filter() mit anderen Iterablen
So wie wir es mit Listen gemacht haben, funktioniert
filter()auch mit allen iterierbaren Größen, wie Tupeln, Mengen und sogar Generatorausdrücken. Das ist gut zu wissen, denn deine Daten werden nicht immer in Listenform vorliegen.Hier siehst du, wie du ein Tupel filtern kannst:
Dies wird gedruckt:
Vergiss nicht, das Filterobjekt in den gewünschten Typ (Liste, Tupel usw.) umzuwandeln, wenn du die Ergebnisse direkt verwenden willst.
Da ich auch Generatoren erwähnt habe, zeige ich der Vollständigkeit halber auch ein Beispiel für das Filtern mit Generatoren:
Dies ist ein Generator, denn diese Zeile:
numbers = (x for x in range(10))erzeugt ein Generator-Objekt. (Es ist faul und generiert nicht alle Werte auf einmal).Die letzte Zeile:
print(list(result))erzwingt die Auswertung, indem sie das Lazy-Filter-Objekt in eine Liste umwandelt.Kombination von filter() mit map()
Was ist, wenn du deine Daten sowohl filtern als auch umwandeln willst, z. B. wenn du in unserem nächsten Beispiel nur die geraden Zahlen in einer Liste quadrieren willst?
Python macht es dir leicht, indem es dir erlaubt,
filter()undmap()zu kombinieren. Zuerst wähltfilter()die gewünschten Artikel aus und dann wendetmap()eine andere Funktion auf jeden einzelnen an.So sieht das in der Praxis aus:
Dies druckt:
Durch die Verkettung von
filter()undmap()kannst du übersichtliche, lesbare Datenpipelines erstellen, indem du zuerst die Elemente auswählst, die dich interessieren, und sie dann nach Bedarf umwandelst. Es wird Möglichkeiten geben, dieses Muster in deiner eigenen Arbeit zu verwenden.Dinge, auf die du achten solltest
So praktisch
filter()auch ist, es gibt ein paar Fehler, die Menschen machen:filter()gibt ein Filterobjekt zurück, keine Liste. Das kann dich aus dem Konzept bringen, wenn du erwartest, dass du sofort Ergebnisse siehst. Schließe sie immer in eine Liste (oder ein Tupel) ein, wenn du die Ergebnisse sehen oder wiederverwenden willst.filter()funktioniert immer nur mit einer Iterablen zur gleichen Zeit. Wenn du nach mehreren Listen filtern willst, musst du sie zusammenfassen oder eine andere Methode verwenden.filter()ist faul. Die Daten werden erst dann verarbeitet, wenn du sie in eine Liste oder ein Tupel umwandelst oder eine Schleife über sie ziehst. Behalte dieses Verhalten beim Debuggen im Hinterkopf.Fazit
Wie du gesehen hast, kannst du mit der Funktion
filter()in Python schnell Daten bereinigen, indem du nur das herausziehst, was wichtig ist.filter()hilft dir, wenn du ein einmaliges Lambda schreibst oder eine benannte Funktion einfügst.Wenn dir nicht klar ist, wie du
filter()nutzen kannst, oder wenn du denkst, dass das einfach genug war und du weiter lernen willst, haben wir tolle Ressourcen, die dir helfen. Ich empfehle unseren Lernpfad Python Programming Fundamentals.