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))
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
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!