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

循环中用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)

修复说明

  1. 循环范围调整:将前两个循环的range(C)改为range(C-1),确保i+1始终在列表有效索引范围内。
  2. 最后一个元素单独处理:列表最后一个元素没有下一个元素,若其值为1,直接执行counter +=3即可,无需判断后续元素。
  3. 修正第三个循环逻辑:原条件cInt2[i] == 1 and cInt2[i] == 1是重复判断同一元素,修正为判断当前元素和下一个元素同时为1;同时将循环范围改为range(0, C-1, 2),避免i+1越界。

运行修复后的代码,输入示例会得到预期输出9。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:34:50