项目场景:
Leetcode上面的一个简单题:
给定一个矩阵 A, 返回 A 的转置矩阵。
(矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引)
问题描述:
实现转置后的结果是最后一次外层for循环得到的结果:
class Solution:
def transpose(self, A: List[List[int]]) -> List[List[int]]:
#A = [[1,2,3],[4,5,6],[7,8,9]]
r_A = [[None]*len(A)]*len(A[0])
for i in range(len(A)):
for j in range(len(A[0])):
r_A[j][i] = A[i][j]
return r_A
运行结果:
[[3,6,9],[3,6,9],[3,6,9]]
原因分析:
r_A = [[None]*len(A)]*len(A[0])
在建立多维数组的时候,上面这个代码所构建的多维数组代表的是:len(A[0]) 个 r_A = [[None] * len(A)]的一维数组。所以在你改变 r_A[0][0]的时候,相当于把r_A[1][0],r_A[2][0]…都改变了!
解决方案:
r_A = [[None] * len(A) for _ in range(len(A[0]))]
使用一个for循环来建立一个完整的二维数组,使得它是一个整体。
class Solution:
def transpose(self, A: List[List[int]]) -> List[List[int]]:
#A = [[1,2,3],[4,5,6],[7,8,9]]
r_A = [[None] * len(A) for _ in range(len(A[0]))]
for i in range(len(A)):
for j in range(len(A[0])):
r_A[j][i] = A[i][j]
return r_A
运行结果:
[[1,4,7],[2,5,8],[3,6,9]]
Numpy构建数组:
from numpy import *
m1 = array([arange(1,4),arange(4,7)])
return m1
运行结果:
[[1,2,3],[4,5,6]]
("如果你来不及认真的年轻,待明天过去了,那只能努力做到认真的老去。
FIGHTING…")