
在遍历列表时直接使用 `i+1` 访问后继元素,容易因索引越界触发 `indexerror`;正确做法是在访问前检查 `i+1
当你在循环中依赖 list[i+1](例如判断相邻元素关系)时,必须意识到:若 i 取到列表最后一个有效索引(即 len(list) - 1),则 i+1 就等于 len(list),已超出合法索引范围 [0, len(list)-1],Python 会立即抛出 IndexError: list index out of range。
以你提供的代码为例:
for i in range(C):
if cInt1[i] == 1:
counter += 3
if cInt1[i+1] == 1: # ❌ 当 i == C-1 时,cInt1[C] 不存在!
counter -= 1当 C = 5,i 最大为 4,此时 cInt1[5] 越界——这就是报错根源。
✅ 正确解法:前置边界检查
将 cInt1[i+1] == 1 改为复合条件,先验证索引有效性:
for i in range(C):
if cInt1[i] == 1:
counter += 3
if i + 1 < len(cInt1) and cInt1[i+1] == 1: # ✅ 安全访问
counter -= 1
else:
print("hi")同理修复 cInt2 部分:
for i in range(C):
if cInt2[i] == 1:
counter += 3
if i + 1 < len(cInt2) and cInt2[i+1] == 1: # ✅ 同样加保护
counter -= 1⚠️ 额外注意:你第三段循环中存在逻辑冗余:
for i in range(0, C, 2):
if cInt2[i] == 1 and cInt2[i] == 1: # ❌ 等价于 cInt2[i] == 1,且未检查 i 是否越界(虽步长为2,但 C 为奇数时仍可能越界)
counter -= 1建议优化为:
for i in range(0, C - 1, 2): # 确保 i+1 不越界(若需配对操作)
if cInt2[i] == 1 and cInt2[i + 1] == 1:
counter -= 1? 总结:
- 永远不要假设 i+1 合法——显式检查 i + 1
- 使用 range(len(lst) - 1) 替代 range(len(lst)) 可从根本上规避越界(适用于必须成对处理相邻元素的场景);
- 对多维/嵌套索引操作,务必逐层校验边界,切忌依赖“输入可控”的侥幸心理。
修复后,输入示例将正确输出 9。










