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 ?
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)
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 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.
Pour éviter ce problème, utilisez des méthodes alternatives pour modifier les listes pendant l'itération, telles que :
numbers = [n for n in numbers if n >= 20]
numbers[:] = (n for n in numbers if n >= 20)
for i, n in enumerate(numbers): if n < 20: numbers[i] = None numbers = [n for n in numbers if n is not None]
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!