Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre

Remarques sur l'efficacité de Python

Élément 5: Utilisez la notation d'inclusion de liste au lieu de map et filter (p15 ~ 16)

Dans la plupart des cas, la notation d'inclusion est plus propre et plus facile à lire que l'utilisation de fonctions d'ordre supérieur.

Les fonctions d'ordre supérieur sont fonctionnelles et sympas (?), Mais comme elles génèrent des lambdas une par une, elles sont difficiles à lire à moins que vous n'y soyez habitué. Il semble que M. Guido déteste les fonctions d'ordre supérieur en premier lieu, et il y aura un nombre limité de situations où il les utilisera activement.

Si vous pouvez utiliser la notation d'inclusion, écrivez-la dans la notation d'inclusion!

Exemple de quadrillage d'une séquence

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#Écrivez une expression qui met au carré chaque séquence

# map()dans le cas de
squares = map(lambda x: x ** 2, a)
print(list(squares))

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

#En cas de notation d'inclusion
squares = [x ** 2 for x in a]
print(squares)

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Ce dernier est plus facile à voir, n'est-ce pas? Ajoutons une condition pour extraire uniquement les nombres pairs

#Seuls les nombres pairs sont mis au carré et extraits

# map()Et filtre()Si vous écrivez
even_squares = map(lambda x: x**2, filter(lambda x: x % 2 == 0, a))
print(list(even_squares))

>>>
[4, 16, 36, 64, 100]

#En cas de notation d'inclusion
even_squares = [x **2 for x in a if x % 2 == 0]
print(even_squares)

>>>
[4, 16, 36, 64, 100]

C'est plus clair! Il n'y a pas de place pour l'hésitation

À propos, la notation d'inclusion peut être utilisée non seulement pour les listes mais également pour les dictionnaires et les ensembles.

#Inverser les clés et les valeurs du dictionnaire, créer de nouveaux dictionnaires
chile_ranks = {'ghost': 1, 'habanero': 2, 'cayenne': 3}
rank_dist = {rank: name for name, rank in chile_ranks.items()}
chile_len_set = {len(name) for name in rank_dist.values()}
print(rank_dist)
print(chile_len_set)

>>>
{1: 'ghost', 2: 'habanero', 3: 'cayenne'}
{8, 5, 7}

Résumé

Les fonctions d'ordre supérieur ne sont pas mauvaises, mais il est préférable d'écrire du code en mettant l'accent sur la lisibilité. (Sauf pour ceux qui aiment vraiment le type de fonction ...)

Recommended Posts

Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre
EP 7 Utiliser les compréhensions de liste au lieu de carte et de filtre
Élément de mémo Python efficace 3
Élément de mémo Python efficace 11 Utilisez zip pour traiter les itérateurs en parallèle
Notation inclusive de Python (à propos de l'expression de liste et de générateur) [supplémentaire]
Mémo Python efficace Élément 10 Énumérer à partir de la plage
Résumé de l'utilisation de la liste Python
Élément de mémo Python efficace 8 Évitez trois expressions ou plus dans la notation d'inclusion de liste
J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.
Élément de mémo Python efficace 18 Utilisez des arguments de position de longueur variable pour rendre l'apparence plus propre
Comparez la vitesse d'ajout et de carte Python
environnement de développement python -utilisation de pyenv et virtualenv-
Python> Compréhension / Notation inclusive> Compréhension de liste
Liste de code Python à déplacer et à mémoriser
J'ai comparé la vitesse de la référence du python dans la liste et la référence de l'inclusion du dictionnaire faite à partir de la liste dans.
Filtrer, mapper, réduire avec js et python (il existe également des expressions de flèche, des expressions lambda et des expressions d'inclusion)
Note d'apprentissage Python de Mayungo: liste d'histoires et de liens
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
Utilisez urlparse.urljoin au lieu de os.path.join pour les jointures d'URL Python
Exercice Python 2 - Notation d'inclusion de liste
Liste des modules python
Liste de filtres en Python
Ruby, Python et carte
Mémo de type Liste / Dictionnaire Python3
[Mémo] Tri de liste Python3
Élément de note Python efficace 20 Utilisez Aucun et la chaîne de documentation lors de la spécification d'arguments par défaut dynamiques
Module [Python of Hikari-] Chapitre 08-03 (Importation et utilisation de la bibliothèque standard)
Apprenez la "grammaire anglaise" au lieu des mots anglais liés à Python et AI. .. ..
[Route vers Python intermédiaire] Utiliser l'instruction if dans la notation d'inclusion de liste
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Python: créer un dictionnaire à partir d'une liste de clés et de valeurs
Élément de note Python efficace 16 Envisagez de renvoyer un générateur sans renvoyer une liste
python Remarque: enumerate () -Obtenir l'index et l'élément de la liste en même temps et tourner pour l'instruction
[Python] Utilisation correcte de la carte
Résumé des opérations de liste Python3
Mémo tranche python et rubis
Fonctionnement du filtre (Aucun, liste)
Utilisation et intégration de "Shodan"
[Python] Copie d'une liste multidimensionnelle
Liste Python et tapples et virgules
Notation et générateur d'inclusion de liste Python
Installation source et installation de Python
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Liste des solveurs et modélisateurs de conception linéaire (LP) disponibles en Python
python Remarque: map -faire la même chose pour chaque élément de la liste