Élément de mémo Python efficace 8 Évitez trois expressions ou plus dans la notation d'inclusion de liste

** Notes sur Python efficace ** Élément 8: Évitez plus d'une expression dans la notation d'inclusion de liste (p16-18)

Deux ou plusieurs instructions for peuvent être écrites dans la notation d'inclusion

#Sortir le contenu de la matrice dans une liste
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for row in matrix for x in row]
print(flat)

>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Pratique! Faisons un traitement un peu compliqué

#Gardez en ligne et équarrez tout le contenu
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
squared = [[x ** 2 for x in row] for row in matrix]
print(squared)

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

Ouais, c'est un peu compliqué mais toujours lisible Ajoutons une autre boucle!

#Sortir le contenu d'une matrice tridimensionnelle dans une liste
my_list = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
flat = [x for sublist1 in my_list for sublist2 in sublist1 for x in sublist2]
print(flat)

>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

C'est devenu très difficile à voir. À ce stade, il n'y a presque aucun mérite de la notation d'inclusion. Écrivons avec une instruction for normale

#Ecrire avec une boucle for normale
my_list = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
flat = []
for sublist1 in my_list:
    for sublist2 in sublist1:
        flat.extend(sublist2)   #Pas un ajout!

print(flat)

>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Cela aura des lignes plus longues, mais il sera plus lisible que la description précédente. Le plus important est la lisibilité plutôt que le nombre de lignes!

Recommended Posts

Élément de mémo Python efficace 8 Évitez trois expressions ou plus dans la notation d'inclusion de liste
Élément de mémo Python efficace 9 Considérons une expression de générateur pour la notation d'inclusion de grande
Élément de mémo Python efficace 3
EP 8 Évitez plus de deux expressions dans la compréhension de liste
Élément de mémo Python efficace 11 Utilisez zip pour traiter les itérateurs en parallèle
Prenez la somme logique de List en Python (fonction zip)
Mémo Python efficace Élément 10 Énumérer à partir de la plage
Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre
Liste triée en Python
Python> liste> extend () ou + =
Liste de filtres en Python
Mémo de type Liste / Dictionnaire Python3
[Mémo] Tri de liste Python3
Indentation de la notation d'inclusion en Python
La chose semblable à une recherche de liste en Python
Élément de mémo Python efficace 19 Donner un comportement facultatif aux arguments de mot-clé
Élément de note Python efficace 16 Envisagez de renvoyer un générateur sans renvoyer une liste
Expression de régression multiple en Python
Envelopper de longues expressions en python
Évitez KeyError dans le dictionnaire python
Évitez les boucles multiples en Python
Notation et générateur d'inclusion de liste Python
Obtenir des éléments de liste en Python
Un mémo qui gère les guillemets doubles pleine largeur avec les expressions régulières Python