首頁 >後端開發 >Python教學 >為什麼我的循環在從字串中刪除元音時會跳過它們?

為什麼我的循環在從字串中刪除元音時會跳過它們?

DDD
DDD原創
2024-12-12 14:39:10880瀏覽

Why Does My Loop Skip Vowels When Removing Them From a String?

循環忽略反元音函數中的某些刪除

在此程式碼中,我們的目標是建立一個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn