问题描述:
给定一个矩阵 A
, 返回 A
的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例 1:
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]
示例 2:
输入:[[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]
提示:1 <= A.length <= 1000, 1 <= A[0].length <= 1000
问题分析:
这问题让我想到了48题,应该非常简单,或者说都没必要在这里写,我主要的目的是总结一下Python中的 zip 的用法哈。
Python3实现:
# @Time :2018/7/9
# @Author :LiuYinxing
class Solution:
def transpose(self, A): # 方法一
A[::] = zip(*A)
return A
def transpose1(self, A): # 方法二
if len(A) == 0: return []
r, c = len(A), len(A[0])
return [[A[i][j] for i in range(r)] for j in range(c)]
if __name__ == '__main__':
solu = Solution()
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(solu.transpose(A))
Python zip 总结:
(1)zip(): 相当于压缩,简单理解就是,把长度相等的几列数据,压缩成一个矩阵,变成按行储存。例如:
x = ['1', '2', '3']
y = ['a', 'b', 'c']
z = list(zip(x, y))
print(z) # [('1', 'a'), ('2', 'b'), ('3', 'c')]
(2)zip(*):相当于解压,简单理解就是,把一个矩阵本来是一行一行的储存的,现在解压成一列一列的储存,相当于矩阵转置。例如:
x = [['1', 'a'], ['2', 'b'], ['3', 'c']]
z = list(zip(*x))
print(z) # [('1', '2', '3'), ('a', 'b', 'c')]
注意:如果要直接输出,zip()内容要经过 list() 之后才能显示出来。
欢迎指正哦。