一行代码搞定矩阵旋转-----Python

矩阵旋转

在leetcode上刷到一道 旋转图像 的题,自己苦思冥想未果之后去百度搜索了一下,
被 一个 Python答案给惊到了。。。

原题链接: 点击进入

Python代码实现:
        def rotate(self, matrix):
            matrix[:] = map(list,zip(*matrix[::-1]))

一行解决这道题,虽然用Python 一句话解决过好几个简单题,但是这道题的答案我是真的服了!


思路分析:

若这个是原矩阵:

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

顺时针翻转后 成:

  [7,4,1]
  [8,5,2]
  [9,6,3]
1.首先我们考虑一下怎么将矩阵顺时针旋转90°呢?

第一种方法是:

  • 先将矩阵沿中间线上下翻转得到:
  [7,8,9]
  [4,5,6]
  [1,2,3]
  [7,4,1]
  [8,5,2]
  [9,6,3]

第二种方法是:

  • 先将矩阵做转置处理:
  [1,4,7]
  [2,5,8]
  [3,6,9]
  • 然后做沿中间线左右翻转:
  [7,4,1]
  [8,5,2]
  [9,6,3]

2.用Python如何实现呢?
  • Python可以用第一种方法,先上下翻转,再做转置。
  • 上下翻转怎么做?这就用到了,列表的切片。
matrix[::-1]
  • 如何实现矩阵转置呢?
map(list,zip(*matrix))
与 zip 相反,*zipped 可理解为解压,返回二维矩阵式,zip返回的是元组组成的列表,由map将里面的元组全部进行 list 处理后,()—> [ ],
[ (1, 2, 3),            [ [1, 2, 3],
  (4, 5, 6),----------->  [4, 5, 6],
  (7, 8, 9) ]             [7, 8, 9] ]
所以就有了这一句精湛的代码:
matrix[:] = map(list,zip(*matrix[::-1]))

zip浅析: 点击进入
map浅析: 点击进入

若是矩阵逆时针旋转90°,就是上面方法相反,
  • 1.先转置 ,后上下翻转。
  • 2.先左右翻转,再做转置。

下面是先转置,后翻转的代码:

matrix[:] = map(list,zip(*matrix))[::-1]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值