Maison >développement back-end >Tutoriel Python >Pourquoi la modification d'une liste pendant une itération produit-elle des résultats inattendus ?
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)
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]
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)
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]
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!