Comportement étrange lors de la suppression itérative d'éléments en Python
En Python, des résultats étranges peuvent se produire lors de la suppression d'éléments d'une liste au cours d'une itération. Considérez le code suivant :
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
Sortie attendue : [20, 21, ..., 49]
Sortie réelle : [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, ..., 49]
Raison :
Le problème vient de la modification de la liste lors de l'itération. Lors de la première itération de la boucle, 1 est supprimé. Cependant, l'itération suivante ne pointe plus vers 2 dans la liste raccourcie mais vers 3. Cela continue jusqu'à ce qu'il ne reste que des éléments supérieurs à 20.
Solutions :
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: print("do something") numbers[i] = None numbers = [n for n in numbers if n is not None]
Il est important de noter que modifier la longueur d'une liste lors d'une itération n'est généralement pas recommandé. Les solutions proposées offrent des approches alternatives pour atteindre 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!