Compréhension de liste Python (avec exemples)

Dans cet article, nous allons en apprendre davantage sur les compréhensions de listes Python et comment les utiliser.

Compréhension de liste vs boucle For en Python

Supposons que nous voulions séparer les lettres du mot humanet ajouter les lettres en tant qu'éléments d'une liste. La première chose qui vient à l'esprit serait d'utiliser la boucle for.

Exemple 1: Itérer sur une chaîne à l'aide de la boucle for

 h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)

Lorsque nous exécutons le programme, la sortie sera:

 ('Humain')

Cependant, Python a un moyen plus simple de résoudre ce problème à l'aide de la compréhension de liste. La compréhension de liste est une manière élégante de définir et de créer des listes basées sur des listes existantes.

Voyons comment le programme ci-dessus peut être écrit en utilisant des listes de compréhension.

Exemple 2: itération d'une chaîne à l'aide de la compréhension de liste

 h_letters = ( letter for letter in 'human' ) print( h_letters)

Lorsque nous exécutons le programme, la sortie sera:

 ('Humain')

Dans l'exemple ci-dessus, une nouvelle liste est affectée à la variable h_letters, et list contient les éléments de la chaîne itérable 'human'. Nous appelons print()function pour recevoir la sortie.

Syntaxe de la compréhension de liste

 (expression de l'élément dans la liste)

Nous pouvons maintenant identifier où les compréhensions de liste sont utilisées.

Si vous avez remarqué, humanest une chaîne, pas une liste. C'est le pouvoir de la compréhension des listes. Il peut identifier quand il reçoit une chaîne ou un tuple et y travailler comme une liste.

Vous pouvez le faire en utilisant des boucles. Cependant, toutes les boucles ne peuvent pas être réécrites en tant que compréhension de liste. Mais au fur et à mesure que vous apprenez et que vous vous familiarisez avec les compréhensions de listes, vous vous surprendrez à remplacer de plus en plus de boucles par cette syntaxe élégante.

Compréhensions de listes vs fonctions Lambda

La compréhension de liste n'est pas la seule façon de travailler sur des listes. Diverses fonctions intégrées et fonctions lambda peuvent créer et modifier des listes en moins de lignes de code.

Exemple 3: Utilisation des fonctions Lambda dans List

 letters = list(map(lambda x: x, 'human')) print(letters)

Lorsque nous exécutons le programme, la sortie sera

 ('Humain')

Cependant, les compréhensions de liste sont généralement plus lisibles par l'homme que les fonctions lambda. Il est plus facile de comprendre ce que le programmeur essayait d'accomplir lorsque des listes de compréhension sont utilisées.

Conditions dans la compréhension de liste

Les compréhensions de liste peuvent utiliser une instruction conditionnelle pour modifier une liste existante (ou d'autres tuples). Nous allons créer une liste qui utilise des opérateurs mathématiques, des entiers et range ().

Exemple 4: Utilisation de if avec la compréhension de liste

 number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)

Lorsque nous exécutons le programme ci-dessus, la sortie sera:

 (0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

La liste, number_list, sera remplie par les éléments compris entre 0 et 19 si la valeur de l'élément est divisible par 2.

Exemple 5: IF imbriqué avec compréhension de liste

 num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)

Lorsque nous exécutons le programme ci-dessus, la sortie sera:

 (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)

Ici, listez les contrôles de compréhension:

  1. Y est-il divisible par 2 ou non?
  2. Y est-il divisible par 5 ou non?

Si y satisfait les deux conditions, y est ajouté à num_list.

Exemple 6: if… else avec compréhension de liste

 obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)

Lorsque nous exécutons le programme ci-dessus, la sortie sera:

 ('Pair', 'Impair', 'Pair', 'Impair', 'Pair', 'Impair', 'Pair', 'Impair', 'Pair', 'Impair')

Here, list comprehension will check the 10 numbers from 0 to 9. If i is divisible by 2, then Even is appended to the obj list. If not, Odd is appended.

Nested Loops in List Comprehension

Suppose, we need to compute the transpose of a matrix that requires nested for loop. Let’s see how it is done using normal for loop first.

Example 7: Transpose of Matrix using Nested Loops

 transposed = () matrix = ((1, 2, 3, 4), (4, 5, 6, 8)) for i in range(len(matrix(0))): transposed_row = () for row in matrix: transposed_row.append(row(i)) transposed.append(transposed_row) print(transposed)

Output

 ((1, 4), (2, 5), (3, 6), (4, 8)) 

The above code use two for loops to find transpose of the matrix.

We can also perform nested iteration inside a list comprehension. In this section, we will find transpose of a matrix using nested loop inside list comprehension.

Example 8: Transpose of a Matrix using List Comprehension

 matrix = ((1, 2), (3,4), (5,6), (7,8)) transpose = ((row(i) for row in matrix) for i in range(2)) print (transpose)

When we run the above program, the output will be:

 ((1, 3, 5, 7), (2, 4, 6, 8))

In above program, we have a variable matrix which have 4 rows and 2 columns.We need to find transpose of the matrix. For that, we used list comprehension.

**Note: The nested loops in list comprehension don’t work like normal nested loops. In the above program, for i in range(2) is executed before row(i) for row in matrix. Hence at first, a value is assigned to i then item directed by row(i) is appended in the transpose variable.

Key Points to Remember

  • List comprehension is an elegant way to define and create lists based on existing lists.
  • List comprehension is generally more compact and faster than normal functions and loops for creating list.
  • However, we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.
  • N'oubliez pas que chaque compréhension de liste peut être réécrite dans la boucle for, mais chaque boucle for ne peut pas être réécrite sous la forme d'une compréhension de liste.

Articles intéressants...