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

Python矩阵列表报错求助:IndexError: list index out of range

报错原因分析及解决方法

我来帮你拆解这个IndexError: list index out of range报错的根源,再给你对应的修复方案:

一、报错核心原因

  • C列表索引超出范围:你的C列表长度是1000000(索引范围0-999999),但当前循环的总次数会突破这个上限。原来的循环里,a从0跑到1000(共1001次),b也会从0跑到1000(共1001次),总循环次数是1001×1001=1002001次,当s增长到1000000时,访问C[s]就会超出列表的最大索引,直接触发报错。
  • 循环条件逻辑错误:while a<=1000会让a取到1000,但A、B列表都是长度为1000的(索引仅到999),等a=1000时访问A[a],后续也会触发索引越界,这是个潜在的隐藏bug。
  • 累加顺序颠倒:你先执行了s=s+1,再去累加C[s],此时s指向的是下一个还没赋值的C元素,累加的都是初始的0值,完全不符合你的计算预期。

二、解决方法

1. 修正循环范围,匹配列表长度

A和B的有效索引是0-999(共1000个值),所以总循环次数应该是1000×1000=1000000,刚好和C的长度匹配,不会出现索引越界。

2. 改用嵌套for循环,避免手动维护计数器出错

手动维护a、b、s这三个计数器很容易出错,用嵌套for循环能更清晰地实现你的逻辑,代码可读性也更强。

3. 调整累加顺序

应该先给C[s]赋值,再累加这个刚计算好的值,之后再自增s;甚至如果不需要保存所有计算结果,完全可以不用C列表,直接计算累加,还能节省内存。

修复后的代码示例

k = 0
total = 1000
# 用*初始化列表更简洁
A = [0] * total
B = [0] * total
C = [0] * (total * total)
s = 0

for b in range(total):
    for a in range(total):
        current_value = (A[a]**2 + B[b]**2)**0.5
        C[s] = current_value
        k += current_value
        s += 1

print(k / (total * total))

如果不需要保留C列表的所有值,还能进一步简化代码:

k = 0
total = 1000
A = [0] * total
B = [0] * total

for b in range(total):
    for a in range(total):
        k += (A[a]**2 + B[b]**2)**0.5

print(k / (total * total))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:41:47