Python字符串解码循环中遇IndexError: index out of range错误求助
字符串解码问题解决方法
错误原因分析
你碰到的IndexError: pop index out of range,核心问题是在遍历列表的同时修改了列表长度。比如你按原字符串的索引顺序去删除元素,每删一次列表就会变短,而循环用的索引是一开始就固定的,后续的索引自然会超出新的列表长度——哪怕改成range(len(input_word)-2)也没用,因为len(input_word)在循环中是动态变化的,但range生成的序列是固定的。
解决方案1:反向遍历索引
反向遍历列表索引,删除后面的元素不会影响前面未遍历的位置,避免索引错位:
def decode_kemija(word): vowels = {'a', 'e', 'i', 'o', 'u'} word_list = list(word) # 从最后一个索引往前遍历 for i in range(len(word_list)-1, -1, -1): if word_list[i] in vowels: # 确保索引不越界,再删除元音后的两个字符 if i + 2 < len(word_list): word_list.pop(i+2) word_list.pop(i+1) return ''.join(word_list) # 测试用例 print(decode_kemija("zepelepenapa")) # 输出: zelena print(decode_kemija("kepemipijapa")) # 输出: kemija print(decode_kemija("papapripikapa"))# 输出: paprika
解决方案2:正向构建新字符串(推荐)
直接遍历原字符串,遇到元音就跳过后面两个字符,否则将字符加入结果,完全避免修改原序列的麻烦:
def decode_kemija(word): vowels = {'a', 'e', 'i', 'o', 'u'} result = [] i = 0 total_length = len(word) while i < total_length: result.append(word[i]) if word[i] in vowels: # 遇到元音,跳过后续的'p'和重复元音 i += 3 else: i += 1 return ''.join(result) # 测试用例 print(decode_kemija("zepelepenapa")) # 输出: zelena print(decode_kemija("kepemipijapa")) # 输出: kemija print(decode_kemija("papapripikapa"))# 输出: paprika
这种方法逻辑更直观,不需要处理索引越界的问题,代码可读性和稳定性都更高,适合新手理解和使用。
内容的提问来源于stack exchange,提问作者Pantea
相关产品推荐
相关产品推荐

