为什么在这种情况下列表索引超出范围?


N = 3
sum1 = 4
rows, cols = (N+1, sum1+1)
dp = [[-1 for i in range(rows)] for j in range(cols)]
for i in range(0, cols):
dp[0][i] = False

for i in range(0, rows):
dp[i][0] = True

我不知道为什么我会得到一个列表索引超出范围异常的代码,它不显示错误的唯一时间是当我编辑行"dp[0][I] dp[0][I -1]"目的是使矩阵dp大小为3*4,第一列完全为真,第0行完全为假,除非在0,0处为真

您正在创建以下矩阵:

[[-1, -1, -1, -1],
[-1, -1, -1, -1],
[-1, -1, -1, -1],
[-1, -1, -1, -1],
[-1, -1, -1, -1]]

因此,当您尝试遍历cols+1(在本例中为6)时,您将溢出创建的四列总数。

另外,如果你想创建一个3*4矩阵,为什么要增加这些呢?

rows,cols=(N+1,sum1+1)

在任何情况下,您都希望cols-1和rows-1。但正如下面@Rah Maha所提到的,rows+1可以工作,所以您正在反转轴。

N = 3
sum1 = 4
rows, cols = (N+1, sum1+1) # still should not be +1 if you want a 3x4 matrix
# changed cols and rows position so it will be what you want
dp = [[-1 for i in range(cols)] for j in range(rows)]
for i in range(0, cols):
dp[0][i] = False

for i in range(0, rows):
dp[i][0] = True