Heim >Backend-Entwicklung >Python-Tutorial >Warum überspringt mein Loop Vokale, wenn ich sie aus einer Saite entferne?
Schleife ignoriert bestimmte Entfernungen in der Anti-Vokal-Funktion
In diesem Code wollen wir eine Anti-Vokal-Funktion erstellen, die alle Vokale aus entfernt eine gegebene Zeichenfolge. Beim Testen mit dem Beispieltext „Hey Look Words!“ wird jedoch das unerwünschte Ergebnis „Hy lk Words!“ zurückgegeben. Das Problem liegt im Weglassen des zweiten „o“ während des Entfernungsprozesses.
Der Kern des Problems besteht darin, dass wir die Liste ändern, während wir sie durchlaufen, was das erwartete Verhalten stört. Um dieses Problem zu lösen, erstellen wir eine flache Kopie der Liste und iterieren stattdessen darüber.
Für ein klareres Verständnis untersuchen wir das Schleifenverhalten beim Drucken von char und textlist am Anfang der Schleife:
H ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] e ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # ! l ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] o ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] k ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # Problem!! ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] W ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] o ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] d ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] s ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] ! ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] Hy lk Words!
Wie wir sehen können, überspringen wir nach dem Entfernen des ersten „o“ das zweite, da der Listenindex fortgeschritten ist und das Gewollte weggelassen wurde Entfernung.
Um dieses Problem zu beheben, erstellen wir eine Kopie der Liste mit textlist[:]. Auf diese Weise stellen wir sicher, dass die Schleife eine statische Liste durchläuft und so unerwünschtes Überspringen verhindert.
Zusätzlich können wir Pythons Listenverständnis für eine präzisere Lösung nutzen:
def remove_vowels(text): # An improved function name return ''.join(ch for ch in text if ch.lower() not in 'aeiou')
Das obige ist der detaillierte Inhalt vonWarum überspringt mein Loop Vokale, wenn ich sie aus einer Saite entferne?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!