Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表复制与引用-二维矩阵旋转_Python - Fatal编程技术网

Python 列表复制与引用-二维矩阵旋转

Python 列表复制与引用-二维矩阵旋转,python,Python,我试图对2D矩阵进行90度顺时针旋转,如下所示: 目标:顺时针旋转 [1,2,3] [4,5,6] [7,8,9] ----矩阵中行的逆序。 [7,8,9] [4,5,6] [1,2,3] ----将每行中的第一个元素压缩在一起。 [7,4,1] [8,5,2] [9,6,3] 为此,我编写了以下函数,当我在自己的测试数据上运行它时,它可以正常工作: # Works on my own test cases def rotate_matrix(square_matrix): squar

我试图对2D矩阵进行90度顺时针旋转,如下所示:

目标:顺时针旋转
[1,2,3]
[4,5,6]
[7,8,9]
----矩阵中行的逆序。
[7,8,9]
[4,5,6]
[1,2,3]
----将每行中的第一个元素压缩在一起。
[7,4,1]
[8,5,2]
[9,6,3]
为此,我编写了以下函数,当我在自己的测试数据上运行它时,它可以正常工作:

# Works on my own test cases
def rotate_matrix(square_matrix):
    square_matrix = zip(*square_matrix[::-1])
    square_matrix = list(map(list, square_matrix))
    return square_matrix
例如:

m1 = [[1, 2],
      [3, 4]]
r1 = rotate_matrix(m1)
# r1:
# [[3, 1]
#  [4, 2]]


m2 = [[1,2,3,4],
      [5,6,7,8],
      [9,10,11,12],
      [13,14,15,16]]
r2 = rotate_matrix(m2)
# r2:
# [[13, 9, 5, 1]
#  [14, 10, 6, 2]
#  [15, 11, 7, 3]
#  [16, 12, 8, 4]]
现在,我正在学习Python编程访谈的内容,这本书有一个针对这些问题的测试框架(位于此处),除非我将代码修改为以下内容,否则我无法通过任何测试用例:

# Works on EPI test cases
def rotate_matrix(square_matrix):
    square_matrix[:] = zip(*square_matrix[::-1])
    square_matrix[:] = map(list, square_matrix)
    return square_matrix
我原以为我理解python列表的特性,但我在这里不知所措。我正在尝试就地修改列表,那么为什么在赋值语句中需要使用
square\u matrix[:]
而不是
square\u matrix


同样,只有当我在EPI测试框架中运行这个时,这才是一个问题。事实上,只要我删除
[:]
PyCharm就告诉我“没有使用局部变量'square\u matrix'值”。

如果你试图修改列表,为什么你的函数会返回任何东西?(没有阅读所有测试)函数应该在适当的位置旋转矩阵还是返回它的旋转版本?i、 e.在经过修改的版本中是否仍然有一个
返回平方矩阵
?@melpomene我在我的示例中返回它,以确保列表实际上在函数之外被修改。没有必要。如果您试图验证列表是否已在函数外部修改,则需要在调用后查看
m2
r2
有什么用?@martineau矩阵应该修改到位,代码中不需要“return square\u matrix”,我只需要打印结果以确保。删除该return语句不会导致上面的代码通过EPI测试用例。如果您试图就地修改列表,为什么您的函数会返回任何内容?(没有阅读所有测试)函数应该就地旋转矩阵还是返回旋转版本的矩阵?i、 e.在经过修改的版本中是否仍然有一个
返回平方矩阵
?@melpomene我在我的示例中返回它,以确保列表实际上在函数之外被修改。没有必要。如果您试图验证列表是否已在函数外部修改,则需要在调用后查看
m2
r2
有什么用?@martineau矩阵应该修改到位,代码中不需要“return square\u matrix”,我只需要打印结果以确保。但是,删除该return语句不会导致上面的代码通过EPI测试用例。