Bouclage incorrect lors de la suppression d'éléments des listes
Lorsque vous parcourez une liste et supprimez des éléments dans la boucle, vous pouvez rencontrer un comportement inattendu. Considérez le code suivant :
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i) print(letters)</code>
Au lieu de supprimer tous les éléments comme prévu, ce code génère le résultat suivant :
['b', 'd', 'f', 'h', 'j', 'l']
Ce comportement apparemment étrange est expliqué par la documentation de Python :
[I]il n'est pas sûr de modifier la séquence itérée dans la boucle. Si vous devez modifier la liste sur laquelle vous parcourez, vous devez parcourir une copie.
Dans ce cas spécifique, la variable d'itération i est mise à jour après la suppression d'un élément, provoquant l'index de l'élément suivant dans la boucle à ignorer.
Réécriture pour une suppression précise des éléments
Pour corriger ce comportement, vous devez parcourir une copie de la liste ou utiliser des méthodes alternatives pour supprimer des éléments . Voici trois options :
<code class="python">del letters[:]</code>
<code class="python">letters[:] = []</code>
<code class="python">letters = []</code>
Alternativement, si vous devez supprimer des éléments en fonction d'une condition, vous pouvez filtrer la liste à l'aide d'une compréhension ou de la fonction filter() :
<code class="python">letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]</code>
<code class="python">letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))</code>
En suivant ces directives, vous pouvez garantir une suppression précise et efficace des éléments des listes en Python .
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!