循環忽略反元音函數中的某些刪除
在此程式碼中,我們的目標是建立一個anti_vowel 函數,它將消除來自給定的字串。但是,當使用範例文字「Hey Look Words!」進行測試時,它會傳回「Hy lk Words!」的不良結果。問題在於刪除過程中遺漏了第二個「o」。
問題的癥結在於我們在迭代列表時修改了列表,這破壞了預期的行為。為了解決這個問題,我們建立清單的淺表副本並對其進行迭代。
為了更清楚地理解,讓我們檢查在循環開始時打印char 和textlist 時的循環行為:
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!
正如我們所看到的,刪除第一個“o ”後,由於列表索引已提前,我們跳過了第二個“o”,導致遺漏了預期的內容刪除。
為了解決這個問題,我們使用 textlist[:] 來製作清單的副本。透過這樣做,我們確保循環遍歷靜態列表,防止任何不必要的跳過。
此外,我們可以利用 Python 的列表推導式來獲得更簡潔的解決方案:
def remove_vowels(text): # An improved function name return ''.join(ch for ch in text if ch.lower() not in 'aeiou')
以上是為什麼我的循環在從字串中刪除元音時會跳過它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!