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 :
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i)</code>
Étonnamment, l'impression finale des lettres révèle que seul un élément sur deux a été supprimé.
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 des éléments
Pour la suppression conditionnelle des éléments, créez une copie du liste en utilisant la syntaxe de tranche [:] :
<code class="python">commands = ["ls", "cd", "rm -rf /"] for cmd in commands[:]: if "rm " in cmd: commands.remove(cmd)</code>
Vous pouvez également utiliser la fonction de filtre pour exclure les éléments indésirables :
<code class="python">commands = [cmd for cmd in commands if not is_malicious(cmd)]</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!