题目来源–Leetcode[1]
求一个列表矩阵的转置。
没啥说的,直接上思路及其代码:
解法(一):
直接用转置的定义,矩阵转置的定义为行变列,列变行,即将矩阵中的元素行列颠倒,基于这个思路,将列表矩阵中的每一个小列表看成是行,列表中元素对应的竖线的元素是列,这样转置就是找到小列表的元素(在外循环)及其对应列的元素(内循环)做一个append,再将append之后的元素做一个append即可。上代码:
class Solution:
def transpose(self, A):
"""
:type A: List[List[int]]
:rtype: List[List[int]]
"""
b = list()
c = list()
for j in range(0,len(A[0])):
for i in range(0,len(A)):
c.append(A[i][j])
b.append(c)
c = list()
return b
解法2思路:
既然是矩阵,直接矩阵.T
就可以了哇,但这是矩阵套矩阵哇,怕啥,转过来就好了。在Leetcode上无法完成提交,本地做了test。Leetcode报:
Line 63: Exception: Type <class 'numpy.matrixlib.defmatrix.matrix'>: Not implemented
这个稍后再看看咋回事,,,,本地做了个test如下:
def transpose(A):
return matrix(A).T
if __name__ == '__main__':
from numpy import *
A=[]
A = [[1]]
A = [[1,2]]
A = [[1],[2]]
A = [[1,2,3],[4,5,6],[7,8,9]]
A = [[1,2,3],[4,5,6]]
print(transpose(A))
有一个大神[2]一行代码写好了,是一个元组组成列表:
return list(zip(*a))
zip
干嘛的呢?简单地来说,就是对应元素的竖线元素组成一个元组
Ref:
[1] https://leetcode.com/problems/transpose-matrix/description/
[2] https://leetcode.com/problems/transpose-matrix/discuss/146767/Python-1-Liner