我正在编写一个从单词中删除所有元音的函数。它看起来像这样: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