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

Pourquoi la modification d'une liste pendant l'itération provoque-t-elle des résultats inattendus en Python ?

DDD
Libérer: 2024-12-24 16:14:18
original
839 Les gens l'ont consulté

Why Does Modifying a List During Iteration Cause Unexpected Results in Python?

Comprendre les dangers liés à la modification de listes pendant l'itération

Parcourir une liste tout en y apportant des modifications peut entraîner un comportement inattendu en raison d'incohérences entre l'état de la liste et la compréhension qu'en a l'itérateur. Pour illustrer cela, considérons le code Python suivant :

l = range(100)
for i in l:
    print(i)
    print(l.pop(0))
    print(l.pop(0))
Copier après la connexion

Au lieu de la sortie attendue de nombres séquentiels, ce code produit un résultat particulier. La raison réside dans le fait que pendant que l'itérateur parcourt la liste l, la liste elle-même est modifiée. Plus précisément, la méthode pop(0) supprime les éléments du début de l.

Pour éviter de telles incohérences, il est crucial d'éviter de modifier le conteneur sur lequel l'itération est effectuée. Une solution courante consiste à créer une copie du conteneur et à parcourir la copie. Cependant, dans des cas comme celui-ci, où l'objectif est de modifier le conteneur d'origine, une approche différente est nécessaire.

Considérez le code alternatif suivant :

i = 0
while i < len(some_list):
    print(some_list[i])
    print(some_list.pop(0))
    print(some_list.pop(0))
    i += 1
Copier après la connexion

Dans ce code, nous utilisons une boucle while pour contrôler l'itération manuellement. Au lieu de parcourir directement la liste, nous utilisons un index i pour accéder aux éléments, puis extrayons manuellement les éléments de some_list. Cela garantit que la boucle répond aux mises à jour de some_list.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal