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

Python构建DP矩阵时出现list index out of range报错是什么原因?

报错根因

你的二维列表初始化逻辑把行、列维度搞反了,导致实际生成的矩阵维度和预期不一致,访问索引越界。

  • 按照你定义的rows = N+1 = 4,cols = sum1+1 =5,要生成rows行、cols列的矩阵,Python二维列表初始化的规则是外层循环控制行数,内层循环控制列数,正确写法应该是dp = [[-1 for i in range(cols)] for j in range(rows)]
  • 你当前的写法dp = [[-1 for i in range(rows)] for j in range(cols)]生成的是cols行、rows列的矩阵,也就是5行、4列,每行只有4个元素,索引范围是0~3
  • 第一个循环for i in range(0, cols)的i会遍历0~4,当i=4时访问dp[0][4],超出了dp[0]的最大索引3,直接触发越界错误

修改为dp[0][i-1]不报错的原因

i从0到4时,i-1的范围是-1~3,虽然i=0时会访问dp[0][-1](也就是该行最后一个元素)不会触发语法报错,但这个逻辑完全不符合你的功能预期,只是碰巧避开了语法错误而已。

符合需求的修正代码

你的预期是创建3*4的dp矩阵,第一列全为True、第0行除(0,0)外全为False,修正后代码如下:

# 定义3行4列的矩阵维度
rows, cols = (3, 4)
# 按行优先顺序初始化矩阵
dp = [[-1 for _ in range(cols)] for _ in range(rows)]

# 处理第0行:仅(0,0)为True,其余为False
dp[0][0] = True
for i in range(1, cols):
    dp[0][i] = False

# 处理第0列:全部为True
for i in range(0, rows):
    dp[i][0] = True

如果需要保留原代码的N、sum1变量,仅调整二维列表初始化时的行列顺序即可。

内容的提问来源于stack exchange,提问作者Rah Maha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:39:03