Les listes Python sont assez flexibles, mais trouver la meilleure façon de supprimer des éléments peut s’avérer délicat, surtout si vous souhaitez que votre code reste propre et ne ralentisse pas. Que vous souhaitiez supprimer des éléments en fonction d’une condition, de leur index, ou simplement tout effacer, il existe différentes astuces pour chaque cas. Parfois, une méthode simple suffit, d’autres fois, il faut être plus précis. Et honnêtement, dans certaines configurations, ces méthodes se comportent bizarrement, comme ne pas supprimer des éléments immédiatement ou générer des erreurs ; il faut parfois les pousser un peu. Voici donc un aperçu des principales méthodes, avec quelques conseils et les points à surveiller.
Comment supprimer des éléments d’une liste en Python
Méthode 1 — Supprimer les éléments par état (idéal pour supprimer plusieurs éléments à la fois)
C’est probablement l’astuce la plus courante. Au lieu de supprimer les éléments un par un (ce qui peut être lent), vous créez une nouvelle liste avec uniquement ce que vous souhaitez conserver. Les listes de compréhension sont idéales pour cela. Elles sont rapides, moins sujettes aux erreurs et évitent le ralentissement O(n²) lors des suppressions lors d’une itération. Vous pouvez également le faire sur place en réaffectant à la tranche de liste d’origine.
nums = [1, 2, 5, 4, 3, 5, 6] # Remove all 5s nums = [x for x in nums if x != 5] print(nums) # [1, 2, 4, 3, 6] # To modify in place (useful if others reference the same list) nums[:] = [x for x in nums if x != 5]
Pour les listes imbriquées, vous pouvez aplatir le filtrage comme suit :
lists = [[1, 2, 3], [4, 5, 6]] # Filter inner lists for even numbers lists = [[x for x in inner if x % 2 == 0] for inner in lists] print(lists) # [[2], [4, 6]]
Pourquoi est-ce utile ? Parce que cela s’effectue en un seul passage, au lieu de supprimer plusieurs fois, ce qui peut ralentir le processus. De plus, cela réduit le risque de perturber vos index.
Méthode 2 — Supprimer par index avec pop()
oudel
Si vous connaissez précisément l’emplacement de l’élément (par exemple, à l’index 2), utiliser pop()
ou del
est simple. Ces options sont utiles pour supprimer un élément d’un emplacement précis sans difficulté supplémentaire.
items = ["a", "b", "c", "d"] # Remove and get the item at index 2 removed = items.pop(2) print(removed) # "c" # Remove without returning anything at index 1 del items[1] print(items) # ["a", "c", "d"]
Vous pouvez également cibler une tranche. Par exemple, supprimer plusieurs éléments à la fois :
items = ["a", "b", "c", "d", "e"] del items[1:4] # removes "b", "c", "d" print(items) # ["a", "e"]
@ Remarque : La suppression de tranches peut parfois être un peu bizarre si vous n’y prenez pas garde, notamment avec des indices négatifs ou des tranches vides. Mais en général, cela fonctionne.
Méthode 3 — Supprimer la première valeur d’appariement avecremove()
Si vous connaissez simplement la valeur à supprimer, remove()
cette fonction fonctionne, mais seulement la première fois qu’elle est trouvée. Pratique pour les petites listes ou lorsque les doublons ne sont pas importants. Vérifiez d’abord si la valeur existe, sinon vous obtiendrez un ValueError
.
names = ["Ada", "Linus", "Ada", "Guido"] names.remove("Ada") print(names) # ["Linus", "Ada", "Guido"] # Avoid errors if not present if "Grace" in names: names.remove("Grace")
Pourquoi utiliser ceci ? Parce que c’est simple et clair lorsqu’il s’agit de supprimer la première correspondance.
Méthode 4 — Vider toute la liste avecclear()
Cette méthode est idéale lorsque vous devez tout effacer tout en conservant la variable de liste intacte. Elle est plus propre que l’affectation d’une liste vide, surtout si d’autres parties de votre code contiennent des références à celle-ci.
records = [1, 2, 3] records.clear() print(records) # []
Alternativement, vous pouvez faire :
records[:] = []
Méthode 5 — Conseils de sécurité et de rapidité
- Ne faites pas ce genre de choses risquées :
# For x in items: # if should_delete(x): # items.remove(x)
Cela peut ignorer des éléments ou provoquer un comportement inattendu, car la modification d’une liste lors d’une itération sur celle-ci est imprévisible.
items = [x for x in items if not should_delete(x)]
Beaucoup plus rapide et plus sûr, en particulier pour les grandes listes.
last_item = data.pop() # Removes and returns last item quickly
Référence rapide : quelle méthode convient ?
[x for x in seq if keep(x)]
— Pour le retrait conditionnel de lots d’articles.seq.pop(i)
— Déplacer par index, peut renvoyer l’élément.del seq[i]
— Supprimer par index sans retour, même les tranches.seq.remove(value)
— Premier match seulement, soyez prêt à faire des erreurs en cas d’absence.seq.clear()
— Essuyez tout.
Conclure
En gros, Python simplifie la suppression d’éléments dans les listes, mais tout est une question d’outil. Utilisez les compréhensions de liste pour les suppressions groupées, les méthodes d’indexation lorsque l’emplacement est connu et remove()
pour les premières occurrences. Gardez simplement à l’esprit certaines particularités, comme la suppression de tranches qui peut être étrange, et testez votre code jusqu’à ce qu’il fonctionne parfaitement. En général, un filtre rapide ou un remplacement sur place suffit.
Résumé
- Utiliser les compréhensions de liste pour la suppression en masse en fonction des conditions
- Choisissez
pop()
oudel
si vous connaissez la position - Utiliser
remove()
pour se débarrasser de la première valeur correspondante - Effacer toute la liste lorsque
clear()
cela est nécessaire
Bien que Python offre de nombreuses façons de ranger vos listes, savoir laquelle choisir peut vous épargner bien des soucis à long terme. Espérons que cela vous fera gagner quelques heures, ou du moins vous permettra de vous sentir plus à l’aise avec le nettoyage de vos listes.