循环中用i+1访问列表元素时,如何修复Index out of range错误?
修复列表循环中「索引越界(Index out of range)」错误
问题描述
在循环中通过i+1遍历列表元素时触发**索引越界(Index out of range)**错误,因使用i-1会回到列表最后一项,无法采用该方式,需修复代码问题。
原代码示例
C = int(input()) cInt1 = list(map(int, input().split())) cInt2 = list(map(int, input().split())) counter = 0 for i in range(C): if cInt1[i] == 1: counter+=3 if cInt1[i+1] == 1: counter-=1 else: print("hi") for i in range(C): if cInt2[i] == 1: counter+=3 if cInt2[i+1] == 1: counter-=1 for i in range(0, C, 2): if cInt2[i] == 1 and cInt2[i] == 1: counter-=1 print(counter)
输入示例
5 1 0 1 0 1 0 0 0 0 0
预期输出
9
实际错误输出
列表索引超出范围
错误原因分析
循环for i in range(C)会让i遍历从0到C-1的所有值,当i取到最后一个索引C-1时,i+1等于C,而列表的有效索引范围是0到C-1,此时访问cInt1[i+1]或cInt2[i+1]必然触发索引越界错误。
修复后的代码
C = int(input()) cInt1 = list(map(int, input().split())) cInt2 = list(map(int, input().split())) counter = 0 # 第一个循环:遍历到倒数第二个元素,避免i+1越界 for i in range(C-1): if cInt1[i] == 1: counter += 3 if cInt1[i+1] == 1: counter -= 1 else: print("hi") # 单独处理最后一个元素:如果是1,只加3,无后续元素可判断 if cInt1[-1] == 1: counter += 3 # 第二个循环:同理遍历到倒数第二个元素 for i in range(C-1): if cInt2[i] == 1: counter += 3 if cInt2[i+1] == 1: counter -= 1 # 单独处理cInt2最后一个元素 if cInt2[-1] == 1: counter += 3 # 第三个循环:修正条件并限制范围,避免i+1越界 for i in range(0, C-1, 2): if cInt2[i] == 1 and cInt2[i+1] == 1: counter -= 1 print(counter)
修复说明
- 循环范围调整:将前两个循环的
range(C)改为range(C-1),确保i+1始终在列表有效索引范围内。 - 最后一个元素单独处理:列表最后一个元素没有下一个元素,若其值为1,直接执行
counter +=3即可,无需判断后续元素。 - 修正第三个循环逻辑:原条件
cInt2[i] == 1 and cInt2[i] == 1是重复判断同一元素,修正为判断当前元素和下一个元素同时为1;同时将循环范围改为range(0, C-1, 2),避免i+1越界。
运行修复后的代码,输入示例会得到预期输出9。
内容的提问来源于stack exchange,提问作者Ibrahim Kasim
相关产品推荐
相关产品推荐

