【问题标题】:Why is the list index out of range in this case? [duplicate]为什么在这种情况下列表索引超出范围? [复制]
【发布时间】:2021-12-03 09:27:07
【问题描述】:
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 处为真

【问题讨论】:

  • 为什么你认为你可以在listlen(cols) 中索引到cols?合法的list 索引从0len(thelist) - 1,而你在每个range 中的+ 1 意味着你超越了一个。
  • "我不知道为什么我会得到一个超出范围异常的列表索引" 用您自己的话来说,您认为在 dp[0][i] = False 中使用 i 的确切值是有意义的? (列出所有这些,不要列出任何其他内容。)用你自己的话来说,你认为for i in range(0, cols+1): 会设置哪些i 值? (列出所有这些,不要列出任何其他内容。)现在,测试您认为的情况。
  • @ShadowRanger 谢谢你,我刚刚注意到我发布了错误的代码,你能看看编辑,让我知道可能是什么原因吗?谢谢!

标签: python arrays list


【解决方案1】:

您正在创建以下矩阵:

[[-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

【讨论】:

  • "你想要 cols-1 和 rows-1" -- 嗯,实际上,rows-1 不起作用,但 rows+1 可以。看起来 OP 把轴搞混了。
  • 非常感谢您,我只是注意到我实际上发布了错误的代码,请您看看编辑并告诉我可能是什么问题?
猜你喜欢
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多