为了账号安全,请及时绑定邮箱和手机立即绑定

此代码片段如何旋转矩阵?

此代码片段如何旋转矩阵?

斯蒂芬大帝 2021-03-30 21:02:34
在寻找一种旋转矩阵的pythonic方法时,我遇到了这个答案。但是,没有附加说明。我在此处复制了代码段:rotated = zip(*original[::-1])它是如何工作的?
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

>>> lis = [[1,2,3], [4,5,6], [7,8,9]]

[::-1] 反转列表:


>>> rev = lis[::-1]

>>> rev

[[7, 8, 9], [4, 5, 6], [1, 2, 3]]

现在我们zip在rev的所有项目上使用,并将每个返回的元组附加到旋转后的元素上:


>>> rotated = []

>>> for item in zip(rev[0],rev[1],rev[2]):

...     rotated.append(item)

...     

>>> rotated

[(7, 4, 1), (8, 5, 2), (9, 6, 3)]

zip 从传递给它的每个iterable的相同索引中选择项目(它最多运行到具有最小长度的项目),并将它们作为元组返回。


什么是*:


*用于解压缩revto的所有项目zip,因此我们无需手动输入 rev[0], rev[1], rev[2]即可zip(*rev)。


上面的zip循环也可以写成:


>>> rev = [[7, 8, 9], [4, 5, 6], [1, 2, 3]]

>>> min_length = min(len(x) for x in rev)  # find the min length among all items

>>> rotated = []


for i in xrange(min_length):        

    items = tuple(x[i] for x in rev)  # collect items on the same index from each

                                      # list inside `rev`  

    rotated.append(items)

...     

>>> rotated

[(7, 4, 1), (8, 5, 2), (9, 6, 3)]


查看完整回答
反对 回复 2021-04-02
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

作为Ashwini和HennyH的解释的补充,以下是一个小图来说明该过程。

//img1.sycdn.imooc.com//6066ccf60001e09b05420124.jpg

  1. 首先,[::-1]slice运算符反转列表的列表,获取整个列表(因此可以省略前两个参数),并使用步骤-1

  2. 其次,该zip函数采用多个列表,并有效地返回行和列反转的新列表。该*说列表清单中解压缩到几个列表。

可以看出,这两个操作的组合将旋转矩阵。


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号