Python 如何从另一个二维列表中为二维列表赋值?

Python 如何从另一个二维列表中为二维列表赋值?,python,list,Python,List,我有一个二维列表,其中的值我正在更改。它们需要保存在另一个二维列表中(第一个列表不应更改) 我试图直接设置值,但出现以下错误: 索引器错误:列表索引超出范围 这是因为在fin\u 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]

我有一个二维列表,其中的值我正在更改。它们需要保存在另一个二维列表中(第一个列表不应更改)

我试图直接设置值,但出现以下错误: 索引器错误:列表索引超出范围

这是因为在
fin\u 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 = []
它可以是任意长的,要停止输入,必须写:“结束”

然后将字符串值更改为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\u mat

中逐个添加值,首先创建原始矩阵的副本,如下所示:

import copy
fin_mat = copy.deepcopy(mat)

首先创建原始矩阵的副本,如下所示:

import copy
fin_mat = copy.deepcopy(mat)

我认为不用像下面这个例子那样列举就更容易做到:

import cv2
img = cv2.imread("./Screenshot.png",1)
print(img.shape) # output is (961, 1744, 3)
for i in range(len(img)):
    for j in range(len(img[i])):
        img[i][j]=5

我认为不用像下面这个例子那样列举就更容易做到:

import cv2
img = cv2.imread("./Screenshot.png",1)
print(img.shape) # output is (961, 1744, 3)
for i in range(len(img)):
    for j in range(len(img[i])):
        img[i][j]=5

围绕问题本身有一些问题,但我想我理解你们的问题和问题是什么

本质上,您不仅希望复制列表,还希望在不更改原始列表的情况下进行一些转换

如前所述,复制部分已在其他问题中得到回答。关于索引器,这是由于循环的逻辑;基本上,当
i=0时
您尝试访问
mat[-1][j]

要纠正这一点,您需要添加一些逻辑来解释当您处于矩阵边缘时会发生什么(在本例中为0,但可以随意更改):

fin_mat=fin_mat=[[0]*len(mat[0])]*len(mat)#创建相同维度的空列表
对于i,i_it in enumerate(mat):
对于j,j_it in enumerate(mat[i]):
左=如果i>0,则为mat[i-1][j],否则为0
如果i0,则为0
如果j

希望这有帮助

围绕问题本身有一些问题,但我想我理解您的问题和问题所在

本质上,您不仅希望复制列表,还希望在不更改原始列表的情况下进行一些转换

如前所述,复制部分已在其他问题中得到回答。关于索引器,这是由于循环的逻辑;基本上,当
i=0时
您尝试访问
mat[-1][j]

要纠正这一点,您需要添加一些逻辑来解释当您处于矩阵边缘时会发生什么(在本例中为0,但可以随意更改):

fin_mat=fin_mat=[[0]*len(mat[0])]*len(mat)#创建相同维度的空列表
对于i,i_it in enumerate(mat):
对于j,j_it in enumerate(mat[i]):
左=如果i>0,则为mat[i-1][j],否则为0
如果i0,则为0
如果j

希望这有帮助

什么是
mat
?你能提供它吗?问题看起来是每次迭代的列表索引;简而言之,当1=0时,您尝试访问
mat[-1][j]
,当您到达j+1时,显然会发生这种情况。您应该解释您想要进行更改的逻辑。在
mat[i-m+1]
中还有一个
m
,它没有在任何地方声明(至少没有在您提供的代码中声明)。在看到您的更新之前,请提供我添加的正确答案;如果不适用,请查看并告知什么是
mat
?你能提供它吗?问题看起来是每次迭代的列表索引;简而言之,当1=0时,您尝试访问
mat[-1][j]
,当您到达j+1时,显然会发生这种情况。您应该解释您想要进行更改的逻辑。在
mat[i-m+1]
中还有一个
m
,它没有在任何地方声明(至少没有在您提供的代码中声明)。在看到您的更新之前,请提供我添加的正确答案;看一看,如果不适用,就告诉我我知道,是的。但问题不在于解决方法,我不太明白逻辑,我认为在这种情况下,嵌套的if-else对可读性没有帮助,特别是如果您将其添加到for循环中,但我似乎知道,我做到了。但问题不在于解决方法,我不太明白逻辑,我认为在这种情况下嵌套的if-else对可读性没有帮助,特别是如果您将它添加到for循环中,但它似乎