Maison >développement back-end >Tutoriel Python >Comment puis-je modifier en toute sécurité des chaînes dans une liste pendant une itération en Python ?

Comment puis-je modifier en toute sécurité des chaînes dans une liste pendant une itération en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 14:46:23157parcourir

How Can I Safely Modify Strings Within a List During Iteration in Python?

Itérer et modifier des listes en toute sécurité

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn