转置 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
我一直在试图理解一个列表究竟是如何被转置的,我发现的一种方法是名为“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