Quelles sont les causes d'un comportement inattendu lors de la modification de listes lors d'une itération ?

DDD
Libérer: 2024-10-21 09:02:02
original
204 Les gens l'ont consulté

What Causes Unexpected Behavior When Modifying Lists While Iterating?

Comprendre le comportement d'itération des listes de Python

Lorsque vous travaillez avec des listes Python, il est crucial d'être conscient du fonctionnement de l'itération pour éviter des résultats inattendus. Un piège courant se produit lors de la modification de la liste lors d’une itération. Considérez le code suivant :

x = [1,2,2,2,2]

for i in x:
    x.remove(i)

print(x)  
Copier après la connexion

Contrairement aux attentes, ce code ne parvient pas à supprimer tous les éléments de la liste. Au lieu de cela, il laisse deux éléments derrière lui. Pour comprendre pourquoi, examinons l'ordre des opérations lors de l'itération de la liste.

Ordre des itérations avec modifications de la liste

La boucle for de Python parcourt une liste élément par élément. Lorsque vous modifiez la liste en supprimant un élément dans la boucle, la longueur de la liste change. Cela signifie que l'élément suivant de la séquence d'origine est ignoré lorsque l'itérateur de boucle avance.

Dans notre exemple, lorsque la première itération supprime l'élément 1 de x, la longueur de la liste est décrémentée. Cela ignore l'élément suivant, 2, dans la séquence d'origine. Au fur et à mesure que la boucle se poursuit, des sauts similaires se produisent, laissant 2 et un autre élément non supprimés.

Résoudre le problème

Pour contourner ce problème, évitez de modifier la liste d'origine que vous avez réitérer. Au lieu de cela, envisagez de créer une copie de la liste à parcourir, comme indiqué ci-dessous :

for i in x[:]:
    x.remove(i)
Copier après la connexion

La syntaxe x[:] crée une « tranche » de x qui contient tous ses éléments, créant ainsi une copie. En parcourant cette copie, vous pouvez supprimer en toute sécurité des éléments de la liste d'origine sans en sauter aucun.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!