Comment gérer un comportement inattendu lors de la suppression d'éléments de listes à l'aide de boucles ?

Linda Hamilton
Libérer: 2024-10-19 11:38:01
original
454 Les gens l'ont consulté

How to Handle Unexpected Behavior When Removing Items from Lists Using Loops?

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>
Copier après la connexion

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']
Copier après la connexion

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 :

  1. Supprimer la liste entière :
<code class="python">del letters[:]</code>
Copier après la connexion
  1. Remplacer la liste par une liste vide :
<code class="python">letters[:] = []</code>
Copier après la connexion
  1. Créez une nouvelle liste :
<code class="python">letters = []</code>
Copier après la connexion

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>
Copier après la connexion
<code class="python">letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))</code>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal