** Notes sur Python efficace ** Élément 8: Évitez plus d'une expression dans la notation d'inclusion de liste (p16-18)
#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