更新矩阵值更新整个行



我有以下代码:

def matrixReshape(mat, r, c):
if len(mat)*len(mat[0]) != r*c:
return mat
nums = []
for row in range(len(mat)):
for col in range(len(mat[0])):
nums.append(mat[row][col])
res = [[0]*c]*r
for x in range(r):
for y in range(c):
res[x][y] = nums.pop(0)
return res
mat = [[1,2],[3,4]]
print(matrixReshape(mat, 4, 1))

输出:

[[4], [4], [4], [4]]

但是我想让它输出:

[[1], [2], [3], [4]]

我很困惑为什么整个列得到更新。当我在第二个for循环中打印xy时,我得到:0,0 1,0 2,0 3,0

这是因为您正在像这样初始化res变量:

res = [[0]*c]*r

这使得数组中的每个元素引用相同的值。使用列表推导式初始化列表,它将复制所有元素。这是初始化列表的python方式。

res = [[0 for _ in range(c)] for _ in range(r)]

问题出在这一行。

res = [[0]*c]*r

[0]与r和c相乘时,复制数组[0]。因此,改变它的任何一个实例都会改变所有实例的值。

试试下面这行。

res = [[0 for i in range(c)] for j in range(r)]

使用简单的列表推导式

[[col] for row in mat for col in row]

相关内容

  • 没有找到相关文章

最新更新