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 :
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)]
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