Techniques avancées et cas d'utilisation
Bien que la syntaxe de base des compréhensions de liste (list comprehension) soit puissante, il existe également des techniques et des cas d'utilisation plus avancés qui peuvent améliorer encore vos capacités de traitement de données.
Compréhensions de liste imbriquées
Les compréhensions de liste peuvent être imbriquées pour effectuer des transformations complexes sur les données. Cela est particulièrement utile lorsqu'on travaille avec des données multidimensionnelles, telles qu'une liste de listes ou une liste de dictionnaires.
## Example: Transpose a matrix using nested list comprehension
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed_matrix = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed_matrix)
## Output: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Dans cet exemple, la compréhension de liste externe [[row[i] for row in matrix] for i in range(len(matrix[0]))] itère sur les colonnes de la matrice, tandis que la compréhension de liste interne [row[i] for row in matrix] extrait les éléments de chaque ligne à l'index de colonne correspondant.
Expressions conditionnelles
Les compréhensions de liste prennent également en charge les expressions conditionnelles, qui vous permettent d'inclure ou d'exclure des éléments en fonction d'une condition. Cela peut être utile pour effectuer des filtrages ou des transformations plus complexes.
## Example: Filter and transform a list using conditional expressions
numbers = [1, -2, 3, -4, 5]
positive_squares = [x**2 if x > 0 else 0 for x in numbers]
print(positive_squares)
## Output: [1, 0, 9, 0, 25]
Dans cet exemple, la compréhension de liste [x**2 if x > 0 else 0 for x in numbers] élève au carré les nombres positifs et remplace les nombres négatifs par 0.
Expressions génératrices
Bien que les compréhensions de liste soient un moyen concis de créer des listes, elles peuvent parfois consommer beaucoup de mémoire, surtout lorsqu'on travaille avec de grands ensembles de données. Dans de tels cas, vous pouvez utiliser des expressions génératrices, qui sont similaires aux compréhensions de liste mais génèrent les valeurs à la volée au lieu de créer une liste complète en mémoire.
## Example: Use a generator expression to find the sum of squares
numbers = range(1, 1001)
sum_of_squares = sum(x**2 for x in numbers)
print(sum_of_squares)
## Output: 333833500
Dans cet exemple, l'expression génératrice (x**2 for x in numbers) génère les carrés des nombres à la volée, permettant à la fonction sum() de traiter les valeurs sans créer une grande liste en mémoire.
Ces techniques et cas d'utilisation avancés démontrent la flexibilité et la puissance des compréhensions de liste en Python. En combinant les compréhensions de liste avec d'autres fonctionnalités du langage, vous pouvez créer un code efficace et expressif pour une grande variété de tâches de traitement de données.