You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:45:49