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
Libérer: 2024-12-23 19:53:17
original
744 Les gens l'ont consulté

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

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

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

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

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.cn
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