关于python:我无法弄清楚为什么这段代码返回“列表索引超出范围”错误

I can't figure out why this code is returning a “list index out of range” error

本问题已经有最佳答案,请猛点这里访问。

我不明白为什么这段代码(用于删除单词中的元音)返回"列表索引超出范围错误"。有什么建议吗?

1
2
3
4
5
6
7
8
    def anti_vowel(string):
        my_list = list(string)
        for i in range(0,len(my_list)-1): #For loop iterates over the entire list
            for c in"aeiouAEIOU": #For loop iterates over all vowels"
                if my_list[i] == c:
                    my_list = my_list.pop(i)
    return my_list
print anti_vowel("Hello")


您正在迭代并改变列表,使其小于原始长度:

1
my_list = my_list.pop(i)

使用列表组件:

1
2
3
def anti_vowel(string):
        my_list = list(string)
        return [ x for x in my_list if x not in"aeiouAEIOU"]

如果要返回字符串,请在列表中使用join

1
"".join([ x for x in my_list if x not in"aeiouAEIOU"])

使用列表comp [ x for x in my_list if x not in"aeiouAEIOU"],我们过滤字母,只保留那些不在我们的元音字符串中的字母。

或str.translate

1
2
 def anti_vowel(s):
        return s.translate(None,"aeiouAEIOU")

1
my_list = my_list.pop(i)

您正在删除此语句中列表中的项,因此当它循环遍历列表的原始长度时,列表中的项现在比开始时要少。

您可能希望在遍历列表之前复制该列表,以便遍历原始列表,但从新列表中删除项。


因为您将for循环设置为从0变为原始列表的长度,然后在循环中从列表中弹出项目-所以当您再次循环该循环时,长度已更改。