Maison >développement back-end >Tutoriel Python >Pourquoi la modification d'une liste pendant une itération produit-elle des résultats inattendus ?

Pourquoi la modification d'une liste pendant une itération produit-elle des résultats inattendus ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-23 19:53:17748parcourir

Why Does Modifying a List During Iteration Produce Unexpected Results?

Résultats inattendus lors de la modification d'une liste pendant une itération

Lors de la modification d'une liste pendant une itération dessus, des résultats inattendus peuvent se produire. Considérez le code suivant :

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)

Malgré l'intention de supprimer les nombres inférieurs à 20 de la liste, le résultat obtenu inclut certains de ces nombres. Cet écart se produit parce que la liste est modifiée au cours de l'itération.

Plus précisément, après avoir supprimé le premier nombre inférieur à 20 (1), la boucle passe à l'élément suivant de la liste d'origine, qui est désormais 3 au lieu de 2. . Ce processus se poursuit, entraînant la suppression de tous les nombres impairs inférieurs à 20.

Pour éviter ce problème, il est recommandé d'utiliser une approche alternative, telle que la liste. compréhensions ou expressions génératrices. Voici un exemple utilisant une compréhension de liste :

numbers = [n for n in numbers if n >= 20]

Ce code préserve l'ordre d'origine de la liste tout en filtrant les éléments indésirables. Vous pouvez également utiliser la modification sur place avec une expression génératrice :

numbers[:] = (n for n in numbers if n >= 20)

Si vous devez effectuer des opérations sur un élément avant de le supprimer, envisagez d'utiliser une boucle indexée et de définir l'élément sur Aucun. Ensuite, créez une nouvelle liste qui comprend uniquement des éléments non-Aucun :

for i, n in enumerate(numbers):
    if n < 20:
        print("do something")
        numbers[i] = None
numbers = [n for n in numbers if n is not None]

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