pop()函数在for循环中无法正常工作

时间:2015-12-26 16:19:03

标签: python for-loop

以下是代码:

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!" 显而易见的结果:" Hy lok words!"

我无法弄清楚为什么循环跳过' o'在列表中的索引5上。我知道我可以通过将非元音单词附加到列表并将它们组合来做另一种方式,但我想知道如何获得上述代码的预期结果。

1 个答案:

答案 0 :(得分:4)

您正在删除字符,但您的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)