Éléments sautés en boucle lors de la suppression
Dans le code Python fourni, une fonction anti_voyelle vise à supprimer toutes les voyelles d'une chaîne. Cependant, il rencontre un problème où le dernier caractère « o » n'est pas supprimé. Cela est dû à une erreur courante lors de la modification des listes pendant l'itération.
Le problème de la modification des listes pendant l'itération
Le code parcourt la liste de textes, supprimant les voyelles lorsqu'elles sont rencontrées. Cependant, la modification de la liste brise la logique de la boucle. Lorsqu'un élément est supprimé, la liste se déplace, sautant l'élément suivant dans l'ordre d'origine.
Solution : copiez la liste avant l'itération
Pour résoudre ce problème, un une copie superficielle de la liste originale doit être effectuée avant la boucle. Cela garantit que la boucle progresse dans l'ordre d'origine des éléments même lorsque la liste change :
for char in textlist[:]: # shallow copy of the list # original logic
Comprendre l'élément ignoré
Observer le comportement de la boucle avec les instructions d'impression révèle pourquoi l'élément ignoré se produit :
for char in textlist: print(char, textlist)
Cela montre qu'après avoir supprimé le premier « o », la boucle saute le deuxième 'o' car la liste a été décalée. La boucle identifie alors de manière incorrecte le premier « o » dans « Mots » comme le deuxième « o » à supprimer.
Solutions alternatives : compréhensions de listes
Pour nettoyer approche, envisagez d'utiliser des compréhensions de liste pour filtrer et combiner des éléments :
def remove_vowels(text): return ''.join(ch for ch in text if ch.lower() not in 'aeiou')
Cette approche isole la voyelle filtrage et concaténation de chaînes en une seule ligne, simplifiant le code et évitant le problème de modification de boucle.
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!