我正在編寫一個從單詞中刪除所有元音的函數。它看起來像這樣:Python for循環沒有循環遍歷所有項目
def remove_vowels(word):
vowels = ['a', 'e', 'i', 'o', 'u']
word = list(word)
for letter in word:
print('Looking for letter {}'.format(letter))
if letter.lower() in vowels:
try:
word.remove(letter)
except ValueError:
pass
return ''.join(word)
我希望它通過所有的字母在單詞,檢查每個字母如果是元音陣列中,如果是這樣,將其刪除。
但是,它似乎並沒有檢查所有字母。例如,對於下面的調用:
print(remove_vowels('perception'))
我得到以下輸出:
Looking for letter p
Looking for letter e
Looking for letter c
Looking for letter e
Looking for letter t
Looking for letter i
Looking for letter n
prcpton
出於某種原因,它跳過r
,第二p
和o
。我用其他詞語得到了類似的結果。這是爲什麼發生?
因爲'word.remove(字母)'刪除元音和你迭代相同'word'名單。現在他們有不同的'索引'。嘗試將元素添加到新列表。 – sinsuren
[迭代時從列表中刪除項目]可能的重複(http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating) – McGrady