转置 python 中的列表得到错误的列表

Transposing lists in python getting a wrong list

我一直在试图理解一个列表究竟是如何被转置的,我发现的一种方法是名为“transpose_not_working”的函数,而我在类似帖子中看到的另一种方法是名为“[=15”的函数=]”。我得到的第一个函数的输出是错误的,但我不太明白哪里出了问题。在我看来,第一个函数只是编写第二个函数的扩展方式。我到底哪里搞砸了?我只是看不出我的错误在哪里。

def transpose_not_working(l):
 result = [[0]*len(l)]*len(l[0])
 for i in range(len(l)):
    for j in range(len(l[0])):
        result[j][i] = l[i][j]
 print(result)
 return

def transpose_working(l):
 result = [[l[j][i] for j in range(len(l))] for i in range(len(l[0]))]
 print(result)

matrix = [
[0, 1],
[1, 3],
[2, 5]
]
transpose_not_working(matrix)
transpose_working(matrix)

Output:
[[1, 3, 5], [1, 3, 5]]
[[0, 1, 2], [1, 3, 5]]

在你的代码中你有

result = [[0]*len(l)]*len(l[0])

您正在制作 [0][[0]*len(l)]

的浅拷贝

您可以看到在您的结果中您得到 [[1, 3, 5], [1, 3, 5]],这两行是重复的。浅拷贝导致修改原始对象中的元素也会在浅拷贝中修改它。所以你需要一个更好的方法来启动不涉及浅拷贝的结果变量。

重写代码:

def transpose_not_working(l):
 n = len(l)
 m = len(l[0])
 result = [ [ 0 for i in range(n) ] for j in range(m) ]
 for i in range(len(l)):
    for j in range(len(l[0])):
        result[j][i] = l[i][j]
 print(result)
 return