【发布时间】:2019-03-25 11:35:49
【问题描述】:
我有一个二维列表,其中包含我更改的值。它们需要保存在另一个二维列表中(第一个列表不应更改)。
我尝试直接设置值,但出现此错误: IndexError: 列表索引超出范围。
那是因为fin_mat 中没有任何内容被复制。
如何将更改的值放入新列表中?
for i, i_it in enumerate(mat):
for j, j_it in enumerate(mat[i]):
fin_mat[i][j] = mat[i-1][j] + mat[i+1][j] + mat[i][j-1] + mat[i][j+1]
UPD:好的,我会尽力解释。 程序应该请求一个字符串,并将其转换为一个列表,然后放入另一个列表以创建一个二维列表:
b, st = [], [i for i in input().split()]
mat = []
它可以是任意长的,要停止输入你必须写:“end”
while (st[0] != 'end'):
st = [i for i in input().split()]
b.append(st)
if (st[0] == 'end'):
del b[-1]
比你将字符串值更改为 int
for j in b:
r = [int(item) for item in j]
mat.append(r)
print(mat)
之后,我需要创建另一个矩阵,其中的元素必须由以下公式定义:(i-1, j) + (i+1, j) + (i, j-1) + (i, j+1) = fin_mat[ i ][ j ]
我不能只复制第一个列表,也不能更改它,因为第一个列表中的值在这个公式中。
我需要在fin_mat中一一添加值
【问题讨论】:
-
什么是
mat?你能提供吗? -
问题看起来像每次迭代的列表索引;简而言之,当 1 = 0 时,您尝试访问
mat[-1][j],这显然会在您到达 j+1 时发生 -
你应该解释你想要做的改变的逻辑。在
mat[i-m+1]中还有一个m,它没有在任何地方声明(至少不在您提供的代码中)。请提供MCVE -
我在看到你的更新之前添加了一个正确的答案;看看,如果它不适用,让我们知道