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"] |
如果要返回字符串,请在列表中使用
1 | "".join([ x for x in my_list if x not in"aeiouAEIOU"]) |
。
使用列表comp
或str.translate
1 2 | def anti_vowel(s): return s.translate(None,"aeiouAEIOU") |
1 | my_list = my_list.pop(i) |
您正在删除此语句中列表中的项,因此当它循环遍历列表的原始长度时,列表中的项现在比开始时要少。
您可能希望在遍历列表之前复制该列表,以便遍历原始列表,但从新列表中删除项。
因为您将for循环设置为从0变为原始列表的长度,然后在循环中从列表中弹出项目-所以当您再次循环该循环时,长度已更改。