【发布时间】:2021-10-31 20:29:02
【问题描述】:
我正在尝试解决 LeetCode 问题“旋转图像”,其中 2D int 数组顺时针旋转 90 度(visual representation)。 我找到了一个可行的解决方案,但是当我尝试重新分配名为“矩阵”的二维整数数组时,没有任何修改。我添加了一个打印语句,该语句在标准输出中演示了在某些时候矩阵正在被修改,但是程序输出与标准输出不匹配。即使我硬编码了正确的答案(就像我在注释掉的行中所做的那样),输出总是与输入匹配。
谁能解释一下这里到底发生了什么?
代码:
import numpy as np
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
matrix = [np.asarray(col[::-1]) for col in zip(*matrix)]
# matrix = [[7,4,1],[8,5,2],[9,6,3]]
for col in matrix:
print(col)
输入:
[[1,2,3],[4,5,6],[7,8,9]]
标准输出:
[7 4 1]
[8 5 2]
[9 6 3]
输出:
[[1,2,3],[4,5,6],[7,8,9]]
预期:
[[7,4,1],[8,5,2],[9,6,3]]
【问题讨论】:
-
您没有返回矩阵并且您所做的更改没有到位。
-
我明白了,我原本打算在原地进行更改而不是返回。您能否详细说明为什么将矩阵分配给
[np.asarray(col[::-1]) for col in zip(*matrix)]会产生与原地修改矩阵不同的结果? -
matrix作用域为函数最初是指传入的列表,但随后您将其替换为对您通过理解创建的列表的引用。您实际上并没有更改传递给函数的列表。您可以更改列表,但最好返回新列表(并使用例如mat = replace(mat)调用它)