[PYTHON] Fonctionnement du filtre (Aucun, liste)

Un mémo lorsque vous vous inquiétez du fonctionnement du filtre de fonction intégré

Je pensais que le filtre est une fonction de grande hauteur et prend une fonction comme argument, mais apparemment, il peut prendre None comme argument.

Comportement qui m'intéressait

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

Quant à l'opération, il semble que 0, None et False, qui sont False en booléen, sont supprimés.

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

Solution

Confirmé avec l'aide

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.

Quand None vient à la partie fonction, il semble se comporter comme filter (lambda x: x, list).

prime

Quand j'ai essayé de le vérifier à partir du code source, c'était assez difficile.

La vérification de la source à l'aide d'inspect ne peut pas être effectuée avec la fonction intégrée.

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

J'ai vérifié dans la [Documentation] de Github (https://github.com/python/cpython/blob/3.8/Doc/library/functions.rst#id63), mais la source n'est pas incluse. Ça devrait être ça, les fonctions intégrées sont écrites en C. Vous pouvez vérifier le code source de la fonction de filtrage à partir de Python2 avec builtin_filter dans Mercurial. Je me demande si cela n'a pas changé même après être devenu Python3 ...?

Recommended Posts

Fonctionnement du filtre (Aucun, liste)
Répertorier l'opération inverse
Liste des opérations de base de Python3 list, tapple, dictionnaire, set
[Python] Opération d'énumération
Liste des modules python
Copie de plusieurs listes
Fonctionnement de base des pandas
Liste de filtres en Python
Fonctionnement de base des Pandas
Liste des fonctions d'activation (2020)
Écriture de mémo d'opération de liste
Profondeur de la liste imbriquée
[Pour les débutants] Exemple simple de fonctions d'opération de liste mapper, réduire, filtrer
Affichage des fractions (liste)
EP 7 Utiliser les compréhensions de liste au lieu de carte et de filtre
Résumé des opérations de liste Python3
Liste des nœuds dans les diagrammes
Liste des images Docker personnalisées
Initialisation de tableau multidimensionnel de la liste
[Python] Copie d'une liste multidimensionnelle
Filtrer la sortie de tracemalloc
Liste des styles de codage utiles
[Python] Liste des principales méthodes destructives pour les opérations de liste (ajout / suppression / tri)
[Python] Mémo d'opération de pandas DataFrame
Jugement du if par la notation d'inclusion de liste
Liste des vecteurs d'incorporation de mots prêts à l'emploi
Liste des packages installés par conda
Notifier LINE des informations sur l'exploitation du train
Liste des commandes Linux fréquemment utilisées
Mémo de fonctionnement de l'environnement virtuel Conda
Générer une liste de caractères consécutifs
À propos de la liste de base des bases de Python
Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre