Skip to content

Extraire, remplacer, convertir les éléments d’une liste en Python

En Python, vous pouvez générer une nouvelle liste en extrayant, supprimant, remplaçant ou convertissant des éléments qui remplissent les conditions d’une liste existante avec des compréhensions de liste.

Cet article décrit le contenu suivant.

  • Bases de la compréhension des listes
  • Appliquer l’opération à tous les éléments de la liste
  • Extraire/supprimer les éléments remplissant les conditions de la liste
  • Remplacer/convertir les éléments qui remplissent les conditions de la liste

Consultez l’article suivant pour des exemples de listes de chaînes.

Il est également possible d’échantillonner au hasard des éléments d’une liste.

Prenez la liste suivante comme exemple.

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Bases de la compréhension des listes

En Python, vous pouvez créer une liste à l’aide des compréhensions de liste. C’est plus simple que d’utiliser la boucle for.

[expression for variable_name in iterable if condition]

expression est appliquée aux éléments qui satisfont à la condition d’itérable (liste, tuple, etc.) et une nouvelle liste est générée. si la condition peut être omise, si elle est omise, l’expression est appliquée à 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 expression 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. Voir l’article suivant pour plus de détails.

Si vous souhaitez simplement sélectionner des éléments par condition, vous n’avez pas besoin de les traiter avec une expression, vous pouvez donc l’écrire comme suit.

[variable_name for variable_name in original_list if condition]

Seuls les éléments qui remplissent les conditions (éléments qui renvoient True pour condition) sont extraits et une nouvelle liste est générée.

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 la condition si est remplacée par la condition si ce n’est pas le cas, seuls les éléments qui ne remplissent pas la condition (éléments qui renvoient la condition Faux) sont extraits. Cela équivaut à supprimer les éléments qui remplissent 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 spécifier une condition correspondante sans utiliser not.

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 ou et. La négation not 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 remplissent les conditions de la liste

Si vous souhaitez remplacer ou convertir des éléments qui remplissent la condition sans modifier les éléments qui ne remplissent pas la condition, utilisez des expressions conditionnelles dans la partie expression des compréhensions de liste.

En Python, les expressions conditionnelles peuvent être écrites comme suit :

X est la valeur ou l’expression pour True et Y est la valeur ou l’expression pour False.

a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Utilisez des compréhensions de liste et des expressions conditionnelles :

[X if condition else Y for variable_name in original_list]

La partie entre parenthèses correspond aux expressions conditionnelles. Aucune parenthèse n’est nécessaire dans le code réel.

[(X if condition else Y for variable_name) in original_list]

Si vous écrivez nom_variable 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]