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

拆分数字时触发list index out of range错误,求代码修复方案

解决列表索引越界问题

问题根源

你的代码触发list index out of range错误,核心原因是访问a[c+1]、a[c+3]这类索引时,没有提前检查索引是否在列表的有效范围内(列表索引从0开始,最大索引为len(a)-1)。比如当c取值为4时,a[c+2]对应索引6,而你的列表a长度仅为6,最大索引是5,自然会触发越界错误。另外,你同时用for i in a循环和手动维护c变量,逻辑上容易冲突,导致索引失控。

修复后的代码

改用while循环手动控制索引,同时在访问后续索引前先做越界检查:

a = '555101'
a = list(map(int, a)) 
c = 0
seq = []
length = len(a)

while c < length:
    if a[c] == 1:
        # 先确认c+1未越界再访问
        if c + 1 < length and a[c+1] != 0:
            seq.append(a[c])
            c += 1
        # 确认c+3未越界再访问
        elif c + 3 < length and a[c+3] == 0:
            if a[c+2] == 0:
                seq.append(1000)
                c += 1
            else:
                seq.append(10)
                c += 1
        # 确认c+2未越界再访问
        elif c + 2 < length and a[c+2] == 0:
            if a[c+1] == 0:
                seq.append(100)
                c += 1
            else:
                seq.append(1)
                c += 1
        # 处理索引不足的边界情况
        else:
            seq.append(a[c])
            c += 1
    elif a[c] == 0:
        c += 1
    elif a[c] == 5:
        seq.append(a[c])
        c += 1

print(seq)

关键改进点

  • 用while c < length替代for i in a,更适配手动控制索引的场景,避免循环次数与索引递增的逻辑冲突。
  • 每次访问c+n类型的索引前,先判断c+n < length,确保不会访问超出列表范围的位置。
  • 新增else分支处理索引不足的边界情况,避免逻辑遗漏导致的异常。

内容的提问来源于stack exchange,提问作者mansto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:25:35