<分区>
我真的不明白这里的逻辑.......
def transpose(A):
output = [['']*len(A)] * len(A[0])
for j in range(len(A[0])):
for i in range(len(A)):
output[j][i] = A[i][j]
return output
输入:[[1,2,3],[4,5,6],[7,8,9]]
预期输出:[[1,4,7],[2,5,8],[3,6,9]]
我的输出:[[3,6,9], [3,6,9], [3,6,9]]
我知道我可以使用 zip 轻松解决这个问题,但我只想知道为什么这段代码会返回重复的列表。
新的更新,我添加了一些打印以了解过程
def transpose(A):
output = [['']*len(A)] * len(A[0])
for j in range(len(A[0])):
for i in range(len(A)):
output[j][i] = A[i][j]
print(j)
print(i)
print(output)
return output
输出是:
0
0
[[1, '', ''], [1, '', ''], [1, '', '']]
0
1
[[1, 4, ''], [1, 4, ''], [1, 4, '']]
0
2
[[1, 4, 7], [1, 4, 7], [1, 4, 7]]
1
0
[[2, 4, 7], [2, 4, 7], [2, 4, 7]]
1
1
[[2, 5, 7], [2, 5, 7], [2, 5, 7]]
1
2
[[2, 5, 8], [2, 5, 8], [2, 5, 8]]
2
0
[[3, 5, 8], [3, 5, 8], [3, 5, 8]]
2
1
[[3, 6, 8], [3, 6, 8], [3, 6, 8]]
2
2
[[3, 6, 9], [3, 6, 9], [3, 6, 9]]
[[3, 6, 9], [3, 6, 9], [3, 6, 9]]
因此,例如,循环的第一步。 j = 0 和 i = 0。但是,output[0][0]、output[1][0] 和 output[2][0] 都被循环改变了。这是为什么呢?????
我现在很迷茫。我用 Java 编写了相同的代码并且它运行正常。
public class TransposeMatrix {
public static int[][] transpose(int[][] A) {
int[][] result = new int[A[0].length][A.length];
for (int j = 0; j < A[0].length; j++) {
for (int i = 0; i < A.length; i++) result[j][i] = A[i][j];
}
return result;
}
}