Pourquoi la modification d'une liste pendant une itération en Python est-elle problématique ?

DDD
Libérer: 2024-10-21 09:05:30
original
850 Les gens l'ont consulté

Why is Modifying a List During Iteration in Python Problematic?

Itérer sur des listes : comprendre le comportement de Python

En Python, lors de l'itération sur une liste et de la modification simultanée de son contenu, un comportement inattendu peut se produire. Considérez cet exemple simplifié :

<code class="python">x = [1,2,2,2,2]

for i in x:
    x.remove(i)

print(x)        </code>
Copier après la connexion

L'intention est de supprimer tous les éléments de la liste. Cependant, lors de l’exécution, deux éléments demeurent. Pourquoi cela se produit-il ?

Le piège de la modification pendant l'itération

Python dicte qu'il n'est pas recommandé de modifier une liste lors d'une itération. Lorsqu'un élément est supprimé d'une liste, la position de l'itérateur passe à l'élément suivant. Dans l'exemple, le premier élément est supprimé, déplaçant la position vers le deuxième élément. Cependant, comme le deuxième élément est toujours un « 2 », il sera ignoré lors de l'itération. Ce saut continue, laissant deux éléments « 2 ».

Résoudre le problème

Pour résoudre ce problème, Python fournit une technique permettant de copier efficacement une liste avant de l'itérer :

<code class="python">for i in x[:]:
    x.remove(i)</code>
Copier après la connexion

Dans ce cas, l'opérateur slice [:] crée une copie de la liste originale. Cela garantit que l'itération se déroule comme prévu et que tous les éléments sont supprimés de la liste d'origine. N'oubliez pas que ce comportement s'applique à la modification des listes pendant l'itération, et non à l'ajout ou au remplacement d'éléments.

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!