"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Lorsque vous parcourez une liste Python, pourquoi devriez-vous éviter de supprimer des éléments ?

Lorsque vous parcourez une liste Python, pourquoi devriez-vous éviter de supprimer des éléments ?

Publié le 2024-11-18
Parcourir:105

When Iterating Through a Python List, Why Should You Avoid Removing Items?

Listes Python : pièges de la suppression d'éléments pendant l'itération

Itérer dans une liste Python tout en supprimant simultanément des éléments peut entraîner un comportement inattendu. Un exemple notable est le suivant : 

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
    letters.remove(i)

Étonnamment, l'impression finale des lettres révèle que seuls tous les autres éléments ont été supprimés.

Raison de l'anomalie

Ce comportement découle de la façon dont Python gère les modifications des itérables pendant l'itération. La documentation indique explicitement que la modification d'une séquence en cours d'itération est généralement dangereuse, en particulier pour les types mutables comme les listes.

Cette pratique peut conduire à un comportement indéfini et à des changements potentiels dans les futures versions de Python.

Approche correcte pour supprimer tous les éléments

Pour supprimer en toute sécurité tous les éléments d'une liste, utilisez l'une des méthodes suivantes :

  • del lettres[:] pour supprimer tous éléments et références à l'objet liste.
  • letters[:] = [] pour attribuer une nouvelle liste vide à la variable existante, en laissant intactes les références à l'objet d'origine.
  • letters = [] pour créer une nouvelle liste vide et l'attribuer à une nouvelle variable.

Gestion de la suppression conditionnelle d'éléments

Pour la suppression conditionnelle d'éléments, créez une copie du liste en utilisant la syntaxe de tranche [:] :

commands = ["ls", "cd", "rm -rf /"]
for cmd in commands[:]:
    if "rm " in cmd:
        commands.remove(cmd)

Vous pouvez également utiliser la fonction de filtre pour exclure les éléments indésirables :

commands = [cmd for cmd in commands if not is_malicious(cmd)]
Déclaration de sortie Cet article est reproduit sur: 1729301595 S'il y a une contrefaçon, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3