[PYTHON] Filterbetrieb (Keine, Liste)

Ein Memo, wenn Sie sich Sorgen über den Betrieb des integrierten Funktionsfilters machen

Ich dachte, dass Filter eine Hochhausfunktion ist und eine Funktion als Argument verwendet, aber anscheinend kann er None als Argument verwenden.

Ängstliches Verhalten

>>> a = [0,1,1.1,'a',None,False]
>>> b = filter(None,a)
>>> list(b)
[1, 1.1, 'a']

Was die Operation betrifft, so scheinen 0, None und False, die in bool False sind, entfernt worden zu sein.

>>> b = filter(lambda x:bool(x),a)
>>> list(b)
[1, 1.1, 'a']

Lösung

Mit Hilfe der Hilfe bestätigt

help(filter)

class filter(object)
 |  filter(function or None, iterable) --> filter object
 |
 |  Return an iterator yielding those items of iterable for which function(item)
 |  is true. If function is None, return the items that are true.
 |
 |  Methods defined here:
 |
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |
 |  __iter__(self, /)
 |      Implement iter(self).
 |
 |  __next__(self, /)
 |      Implement next(self).
 |
 |  __reduce__(...)
 |      Return state information for pickling.
 |
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.

Wenn None zum Funktionsteil kommt, scheint es sich wie ein Filter zu verhalten (Lambda x: x, Liste).

Bonus

Als ich versuchte, es aus dem Quellcode zu überprüfen, war es ziemlich schwierig.

Das Überprüfen der Quelle mit inspect kann mit der integrierten Funktion nicht durchgeführt werden.

>>> import inspect
>>> inspect.getsource(filter)
...
TypeError: <class 'filter'> is a built-in class

Ich habe in Githubs Dokumentation nachgesehen, aber die Quelle ist nicht enthalten. Das sollte es sein, die eingebauten Funktionen sind in C geschrieben. Sie können den Quellcode der Filterfunktion ab Python 2 mit builtin_filter in [Mercurial] überprüfen (https://hg.python.org/cpython/file/860e0fd2fee8/Python/bltinmodule.c). Ich frage mich, ob sich dies auch nach Python3 nicht geändert hat ...?

Recommended Posts

Filterbetrieb (Keine, Liste)
Listen Sie die umgekehrte Operation auf
Liste der grundlegenden Operationen für Python3-Listen, -Tapples, -Wörterbücher und -Sätze
[Python] Operation der Aufzählung
Liste der Python-Module
Kopie mehrerer Listen
Grundlegende Bedienung von Pandas
Filterliste in Python
Grundlegende Bedienung von Pandas
Liste der Aktivierungsfunktionen (2020)
Schreiben von Operationsnotizen
Tiefe der verschachtelten Liste
[Für Anfänger] Einfaches Beispiel für Listenoperationsfunktionen: Zuordnen, Reduzieren, Filtern
Anzeige von Brüchen (Liste)
EP 7 Listenverständnisse anstelle von Karte und Filter verwenden
Zusammenfassung der Python3-Listenoperationen
Liste der Knoten in Diagrammen
Liste der selbst erstellten Docker-Bilder
Mehrdimensionale Array-Initialisierung der Liste
[Python] Kopie einer mehrdimensionalen Liste
Filtern Sie die Ausgabe von tracemalloc
Liste nützlicher Codierungsstile
[Python] Liste der wichtigsten destruktiven Methoden für Listenoperationen (Hinzufügen / Löschen / Sortieren)
[Python] Operationsnotiz von Pandas DataFrame
Beurteilung, ob durch Listeneinschlussnotation
Liste der gebrauchsfertigen Worteinbettungsvektoren
Liste der von conda installierten Pakete
Benachrichtigen Sie LINE über Informationen zum Zugbetrieb
Liste der häufig verwendeten Linux-Befehle
Betriebsnotiz der virtuellen Conda-Umgebung
Generieren Sie eine Liste aufeinanderfolgender Zeichen
Informationen zur Grundlagenliste der Python-Grundlagen
Effektives Python-Memo Element 7 Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter