Leetcode867。转置矩阵;调试;生成列表

时间:2019-03-17 22:00:22

标签: arrays list matrix transpose

我在Leetcode 867中遇到一个奇怪的错误。转置矩阵。

问题是

给出矩阵A,返回A的转置。

矩阵的转置是将矩阵翻转到其主对角线上,从而切换矩阵的行索引和列索引。

示例1:

输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]] 示例2:

输入:[[1,2,3],[4,5,6]] 输出:[[1,4],[2,5],[3,6]]

给出正确的代码是

`res = [[None] * len(A) for _ in range(len(A[0]))]
#res = [[None] * len(A)] * len(A[0]) # why this doesn't work

for r, row in enumerate(A):
    for c, val in enumerate(row):
        res[c][r] = val

return res`

我的解决方法是

`res = [[None] * len(A)] * len(A[0]) # why this doesn't work

for r, row in enumerate(A):
    for c, val in enumerate(row):
        res[c][r] = val

return res`

给出输入和输出为 您的输入 [[1,2,3],[4,5,6]] 输出量 [[3,6],[3,6],[3,6]] 预期 [[1,4],[2,5],[3,6]]

**我的解决方案和正确答案之间的唯一区别是**

`res = [[None] * len(A) for _ in range(len(A[0]))]
res = [[None] * len(A)] * len(A[0]) # why this doesn't work`

**为什么第二行不起作用? **

[[None] * len(A) for _ in range(len(A[0]))] == [[None] * len(A)] * len(A[0])  返回True

1 个答案:

答案 0 :(得分:0)

这是因为

res = [[None] * len(A) for _ in range(len(A[0]))]

创建一个包含len(A [0])个不同列表的列表,而

res = [[None] * len(A)] * len(A[0]) # why this doesn't work

创建一个包含对同一列表的len(A [0])引用的列​​表,以便在其中一个值中修改值会在所有这些值中对其进行修改。

另请参见List of lists changes reflected across sublists unexpectedly ...