Python for 循环没有遍历所有项目

标签 python loops for-loop

我正在编写一个从单词中删除所有元音的函数。它看起来像这样:

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、第二个 po。我用其他词得到了类似的结果。为什么会这样?

最佳答案

它之前不起作用的原因是在你的 for 循环期间你正在改变 word 这意味着每当你删除某些东西时它都会跳过迭代,因为删除导致每个字母向上移动一个位置。这意味着如果在位置 2 有删除,那么下一个项目现在位于位置 2,而它之后的项目位于位置 3,即下一次迭代所在的位置。

def remove_vowels(word):

    vowels = ['a', 'e', 'i', 'o', 'u']

    word = list(word)
    print(word)
    new_word = []

    for letter in word:
        print('Looking for letter {}'.format(letter))

        if letter.lower() not in vowels:
            try: 
                new_word.append(letter)
            except ValueError:
                pass

    return ''.join(new_word)

print(remove_vowels('perception'))

关于Python for 循环没有遍历所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43796462/

相关文章:

php - MySQL 循环或嵌套查询

python - 为不同大小制作循环 def

postgresql - 循环时插入

javascript - 我可以从内部函数中屈服吗?

python - 使用逻辑 True/False 聚合重新采样 Pandas DataFrame

python - Python中的字符串slugification

python - 如何更新 python lib boto?

javascript - 向列表添加删除按钮

c - for循环中多个声明的语法错误

python - 在 seaborn 中并排绘制两列的箱线图