Problème :
Modifier une liste pendant une boucle Python for n'est généralement pas recommandé. Cependant, que se passe-t-il si vous devez modifier les chaînes d’une liste ? Le remplacement de ces valeurs mutables compte-t-il comme une modification interdite ?
Réponse :
Tant que vous modifiez des éléments de la liste qui ont déjà été itérés, cela est considéré acceptable. Par exemple :
a = ['a',' b', 'c ', ' d '] for i, s in enumerate(a): a[i] = s.strip() print(a) # -> ['a', 'b', 'c', 'd']
Ce code parcourt la liste a et supprime les espaces de chaque chaîne. Il le fait sans créer une nouvelle liste et sans l'attribuer à l'original.
Cependant, modifier le nombre d'éléments dans la liste au cours de l'itération est risqué. Par exemple :
b = ['a', ' b', 'c ', ' d '] for i, s in enumerate(b): if s.strip() != b[i]: # leading or trailing whitespace? del b[i] print(b) # -> ['a', 'c '] # WRONG!
Ce code tente de supprimer les éléments avec des espaces de début ou de fin de la liste b. Malheureusement, cela échoue car la suppression d'éléments perturbe l'indexation des itérations suivantes.
Attention :
Il est important de noter que même si vous pouvez modifier en toute sécurité des éléments dans une liste comme décrit , toute tentative d'augmenter ou de diminuer le nombre d'éléments peut conduire à un comportement erroné.
In-Place Suppression :
Si vous souhaitez supprimer efficacement les entrées lors de l'itération, utilisez la compréhension de liste :
b = ['a',' b', 'c ', ' d '] b[:] = [entry for entry in b if entry.strip() == entry] print(b) # -> ['a'] # CORRECT
Ce code crée une nouvelle liste contenant uniquement les entrées sans espace de début ou de fin. , supprimant efficacement les éléments indésirables "sur place".
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!