文档开发者中心
我的

【python成长之路】矩阵翻转

目的:通过列表推导实现矩阵翻转,如[[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个参数进行打包,并组成元组。因此名为压缩

a = [[1, 2], [3, 4]]
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进行转换无法对里面的元素进行转换。

因此为了实现内部元素 从元组转换为列表,应该用遍历各内部元素的方法。


点赞
收藏
回复
分享
举报
浏览852 发布于2019-07-17 02:52未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。