目的:通过列表推导实现矩阵翻转,如[[1,2],[3,4]] 进行翻转后为 [[1,3],[2,4]]
代码:
def reverseMatrix(self, m):
L = [list(i) for i in zip(*m)]
return L【知识点】(以下描述均本人理解,建议搜索官方解释)
1、zip 函数:可以将参数进行打包成元组,一般需要2个参数,如2个列表,然后把两个列表的第1个参数进行打包,并组成元组。因此名为压缩
b = [['a', 'b'], ['c', 'd']]
print(zip(a, b))
[([1, 2], ['a', 'b']), ([3, 4], ['c', 'd'])]
另外,如果a/b元素的数量不一致,元素个数与最短的列表一致
2、zip(*m):将参数中的元组进行解压,一般仅需要1个参数;如下所示,将列表各元素中进行拆分,并将同一行元素组成新的元组
c = [([1, 2], ['a', 'b']), ([3, 4], ['c', 'd'])]
print(zip(*c))
结果:
[([1, 2], [3, 4]), (['a', 'b'], ['c', 'd'])]
3、list函数:将元组转换为列表
问题:矩阵反转,为什么不直接用list(zip(*))?
可以尝试下,如:
a = [[1, 2], [3, 4]] print(zip(*a)) print(list(zip(*a)))
结果为:
[(1, 3), (2, 4)]
[(1, 3), (2, 4)]
发现直接用list(zip(*a)) 与 zip(*a)是一样的。这是因为 zip(*a) 本身是个列表,因此再用list进行转换无法对里面的元素进行转换。
因此为了实现内部元素 从元组转换为列表,应该用遍历各内部元素的方法。





































苏公安网备 32011402010933号