Supprimer d'une liste tout en itérant dessus
Lors d'une itération sur une liste et de la suppression d'éléments, le comportement de Python peut être déroutant. L'extrait de code ci-dessous :
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
Sorties [0, 2, 3, 5, 6, 8, 9], au lieu du [0, 2, 4, 6, 8] attendu.
Comprendre le comportement de suppression itérative
Ce résultat résulte de la façon dont Python gère les séquences mutables pendant l'itération. Lorsque Remove est appelé, la liste sous-jacente est modifiée. Cependant, l'itérateur reste le même et continue de parcourir la liste modifiée.
Le diagramme ci-dessous illustre le processus de suppression :
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 0; remove? no ^ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 1; remove? yes ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 3; remove? no ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 4; remove? yes ^ [0, 2, 3, 5, 6, 7, 8, 9] <- b = 6; remove? no ^ [0, 2, 3, 5, 6, 7, 8, 9] <- b = 7; remove? yes ^ [0, 2, 3, 5, 6, 8, 9] <- b = 9; remove? no ^
Répondre aux questions restantes
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!