Maison  >  Article  >  développement back-end  >  Quelles sont les causes d'un comportement inattendu lors de la modification de listes lors d'une itération ?

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

DDD
DDDoriginal
2024-10-21 09:02:02314parcourir

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)  

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)

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!

Déclaration:
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