拆分数字时触发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
相关产品推荐
相关产品推荐

