HOWTO · Python
Supprimer plusieurs éléments d'une liste en Python
Nous pouvons utiliser des instructions de contrôle if... else, des compréhensions de liste, un découpage de liste et des boucles for pour supprimer plusieurs éléments d'une liste en Python.
Sur cette page
Pour supprimer plusieurs éléments d’une liste Python, déterminez d’abord si la règle de sélection porte sur la valeur de chaque élément ou sur sa position. Une compréhension de liste convient pour sélectionner des valeurs tout en conservant la liste d’origine ; del modifie la liste lorsqu’il s’agit de supprimer une plage ou des index connus.
Choisir entre la suppression de valeurs et celle d’index
Utilisez une condition lorsque ce sont les éléments eux-mêmes qui déterminent ce qui est conservé, par exemple pour ne garder que les nombres pairs. Utilisez des index lorsque vous connaissez les positions à supprimer, quelles que soient les valeurs qui s’y trouvent. Une compréhension crée une nouvelle liste et laisse la source disponible. del modifie la liste existante, ce qui compte si une autre partie du code en conserve une référence.
Supprimer les valeurs qui satisfont une condition
Cet exemple conserve les valeurs paires dans une nouvelle liste. Modifiez le prédicat après if pour appliquer une autre règle, par exemple exclure une chaîne particulière ou conserver les valeurs supérieures à un seuil.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
numbers = [2, 3, 4, 5, 6, 7, 8]
evens = [number for number in numbers if number % 2 == 0]
print("Original:", numbers)
print("Filtered:", evens)
La liste d’origine n’est pas modifiée. Évitez d’appeler remove() sur une liste tout en parcourant cette même liste : la suppression d’un élément décale les éléments restants, ce qui peut faire sauter des correspondances consécutives. Si vous devez modifier la liste en place, parcourez une copie, par exemple avec for value in numbers.copy():, puis supprimez de numbers les valeurs correspondantes. Pour filtrer, la compréhension est plus courte et évite ce risque lié à la modification de la liste.
Supprimer une plage contiguë avec del et le découpage en tranches
Les index d’une liste commencent à zéro. Dans une tranche start:stop, start est inclus et stop est exclu : del items[2:5] supprime donc les éléments aux index 2, 3 et 4. La liste elle-même est modifiée. Cette règle de borne de fin exclue facilite aussi le raisonnement sur des plages adjacentes : la position de fin est celle du premier élément conservé.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
items = ["a", "b", "c", "d", "e", "f"]
del items[2:5]
print(items)
Si une borne de tranche est omise, le début ou la fin de la liste est utilisé. Par exemple, del items[:2] supprime les deux premiers éléments, tandis que del items[3:] supprime tout à partir de l’index 3. Ces formes conviennent aux plages contiguës, mais ne permettent pas de sélectionner des positions dispersées.
Supprimer des index sélectionnés en toute sécurité
Lorsque les positions sont dispersées, supprimez les index par ordre décroissant. La suppression d’un index plus élevé laisse les positions inférieures inchangées. Si vous traitez les index du plus petit au plus grand, chaque suppression décale les éléments suivants vers la gauche et change les éléments désignés par ces index.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
items = ["a", "b", "c", "d", "e", "f"]
indexes_to_remove = [0, 2, 5]
for index in sorted(indexes_to_remove, reverse=True):
del items[index]
print(items)
Fournissez des index valides pour la liste telle qu’elle existe avant les suppressions et évitez les doublons dans la sélection. Cette méthode modifie items ; faites d’abord une copie si vous devez conserver les valeurs d’origine. Pour sélectionner des valeurs selon une condition plutôt que leur position, utilisez plutôt le filtrage.
Choisir la méthode adaptée à votre liste
Choisissez une compréhension de liste pour filtrer par valeur et obtenir un résultat distinct. Choisissez del items[start:stop] pour modifier la liste en supprimant une plage contiguë. Pour des positions connues et dispersées, triez les index par ordre décroissant et supprimez-les un à un. Ces méthodes rendent la règle de sélection explicite et aident à éviter de modifier les mauvais éléments par inadvertance.