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

Pourquoi la modification d'une liste Python pendant une itération entraîne-t-elle des résultats inattendus ?

Barbara Streisand
Libérer: 2024-12-27 18:36:11
original
944 Les gens l'ont consulté

Why Does Modifying a Python List During Iteration Lead to Unexpected Results?

Modification itérative de liste en Python : comprendre les conséquences

En Python, modifier une liste tout en l'itérant peut conduire à des résultats inattendus. 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

Au lieu de supprimer les nombres inférieurs à 20, comme prévu, ce code imprime une liste dans laquelle tous les nombres inférieurs à 20 sont manquants, ainsi que 20 lui-même.

Le problème : Iterator Position Shift

Le problème vient du fait que la suppression d'un élément d'une liste décale la position des éléments suivants. Au fur et à mesure que la boucle progresse, les éléments vérifiés ne sont plus ceux attendus, car les éléments supprimés créent des "trous" dans la liste.

Par exemple, lors de l'itération initiale, 1 est supprimé, mais l'itération suivante ne vérifie pas 2 ; au lieu de cela, il vérifie 3 car la liste a été raccourcie. Ce comportement persiste, entraînant une sortie incorrecte.

Techniques de modification de liste appropriées

Pour éviter ce problème, utilisez des méthodes alternatives pour modifier les listes pendant l'itération, telles que :

  • Liste Compréhension :
numbers = [n for n in numbers if n >= 20]
Copier après la connexion
  • Modification sur place :
numbers[:] = (n for n in numbers if n >= 20)
Copier après la connexion
  • Énumération :
for i, n in enumerate(numbers):
    if n < 20:
        numbers[i] = None
numbers = [n for n in numbers if n is not None]
Copier après la connexion

Ces techniques ne modifient pas la longueur de la liste lors de l'itération, garantissant un traitement correct des éléments et le résultat souhaité.

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