En Python, les compréhensions de liste vous permettent de créer une nouvelle liste en extrayant, supprimant, remplaçant ou convertissant des éléments d’une liste existante en fonction de conditions spécifiques.
L’exemple de code de cet article utilise la liste suivante comme exemple.
l = list(range(-5, 6)) print(l) # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Reportez-vous à l’article suivant pour des exemples impliquant des listes de chaînes.
Vous pouvez également échantillonner de manière aléatoire des éléments d’une liste.
Notions de base sur la compréhension des listes
En Python, vous pouvez créer une liste de compréhension à l’aide de listes de compréhension. C’est plus simple que d’utiliser la boucle 𝐟𝐨𝐫 .
[expression for variable_name in iterable if condition]
𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 est appliqué aux éléments de 𝐢𝐭𝐞𝐫𝐚𝐛𝐥𝐞 (liste, tuple, etc.) qui satisfont 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 , créant ainsi une nouvelle liste. Le 𝐢𝐟 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 peut être omis ; s’il est omis, 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 est appliqué à tous les éléments.
Consultez l’article suivant pour plus de détails sur les compréhensions de liste.
Appliquer l’opération à tous les éléments de la liste
Si vous écrivez l’opération souhaitée dans la partie 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 des compréhensions de liste, cette opération est appliquée à tous les éléments de la liste.
l_square = [i**2 for i in l] print(l_square) # [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25] l_str = [str(i) for i in l] print(l_str) # ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']
Vous pouvez l’utiliser pour convertir une liste de nombres en une liste de chaînes. Consultez l’article suivant pour plus de détails.
Extraire/supprimer les éléments qui répondent aux conditions de la liste
Si vous souhaitez simplement sélectionner des éléments par 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 , vous n’avez pas besoin de les traiter avec 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 , vous pouvez donc l’écrire comme suit.
[variable_name for variable_name in original_list if condition]
Seuls les éléments qui satisfont aux conditions (renvoyant T𝐫𝐮𝐞 pour 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 ) sont extraits, créant une nouvelle liste.
l_even = [i for i in l if i % 2 == 0] print(l_even) # [-4, -2, 0, 2, 4] l_minus = [i for i in l if i < 0] print(l_minus) # [-5, -4, -3, -2, -1]
Si 𝐢𝐟 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 est changé en 𝐢𝐟 𝐧𝐨𝐭 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 , seuls les éléments qui ne remplissent pas la condition (éléments qui retournent F𝐚𝐥𝐬𝐞 versez 𝐜𝐨𝐧𝐝𝐢𝐭𝐢𝐨𝐧 ) sont extraits. Cela équivaut à supprimer les éléments qui répondent à la condition.
l_odd = [i for i in l if not i % 2 == 0] print(l_odd) # [-5, -3, -1, 1, 3, 5] l_plus = [i for i in l if not i < 0] print(l_plus) # [0, 1, 2, 3, 4, 5]
Bien sûr, vous pouvez créer une condition équivalente sans utiliser 𝐧𝐨𝐭 .
l_odd = [i for i in l if i % 2 != 0] print(l_odd) # [-5, -3, -1, 1, 3, 5] l_plus = [i for i in l if i >= 0] print(l_plus) # [0, 1, 2, 3, 4, 5]
Vous pouvez également connecter plusieurs conditions avec 𝐨𝐫 ou 𝐚𝐧𝐝 . La négation 𝐧𝐨𝐭 peut également être utilisée.
l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)] print(l_minus_or_even) # [-5, -4, -3, -2, -1, 0, 2, 4] l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)] print(l_minus_and_odd) # [-5, -3, -1]
Remplacer/convertir les éléments qui répondent aux conditions de la liste
Si vous souhaitez remplacer ou convertir des éléments qui répondent à la condition sans modifier les éléments qui ne répondent pas à la condition, utilisez des expressions conditionnelles dans la partie 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 des compréhensions de liste.
En Python, les expressions conditionnelles peuvent être écrites comme suit :
X if condition else Y
X est la valeur ou l’expression de T𝐫𝐮𝐞 et Y est la valeur ou l’expression de F𝐚𝐥𝐬𝐞 .
a = 80 x = 100 if a > 50 else 0 print(x) # 100 b = 30 y = 100 if b > 50 else 0 print(y) # 0
Utiliser des listes de compréhension et des expressions conditionnelles :
[X if condition else Y for variable_name in original_list]
La partie entre parenthèses représente des expressions conditionnelles. Cependant, les parenthèses ne sont pas nécessaires dans le code réel.
[(X if condition else Y) for variable_name in original_list]
Si vous écrivez 𝐯𝐚𝐫𝐢𝐚𝐛𝐥𝐞_𝐧𝐚𝐦𝐞 dans X ou Y , la valeur de l’élément d’origine est utilisée telle quelle, et si vous écrivez une expression, cette expression est appliquée.
l_replace = [100 if i > 0 else i for i in l] print(l_replace) # [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100] l_replace2 = [100 if i > 0 else 0 for i in l] print(l_replace2) # [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100] l_convert = [i * 10 if i % 2 == 0 else i for i in l] print(l_convert) # [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5] l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l] print(l_convert2) # [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]
