代码如下:

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

def anti_vowel(text):
    tlength = len(text)
    words = []
    result = ""
    for word in range(len(text)):
        words.append(text[word])
        print words
    for index, word in enumerate(words):
        if word.lower() in vowels:
            words.pop(index)
    for old_word in words:
        result += str(old_word)
    return result

print anti_vowel("Hey look words!")

预期结果:“Hy lk wrds!”
明显的结果:“希洛克的话!”
我不明白为什么循环会跳过列表单词中索引5上的“o”。我知道我可以用另一种方法,把非元音单词添加到一个列表中,并将它们组合在一起,但是我想知道如何获得上述代码所需的结果。

最佳答案

您正在删除字符,但您的index正在依赖。所以元音不再是索引了,你想。
最好不要在for循环中更改列表,而是创建一个新列表:

def anti_vowel(text):
    words = []
    for character in text:
        if not (character.lower() in vowels or character.upper() in vowels):
            words.append(character)
    return ''.join(words)

或使用生成器表达式:
def anti_vowel(text):
    return ''.join(c for c in text if c.lower() not in vowels)

如果要删除单个元素,必须使用while循环:
def anti_vowel(text):
    text = list(text)
    index = 0
    while index < len(text):
        if text[index].lower() in vowels:
            del text[index]
        else:
            index += 1
    return ''.join(text)

10-08 08:20
查看更多