Python一行代码解决矩阵旋转的问题


Posted in Python onNovember 30, 2019

今天刷《剑指offer》的时候碰到这样一道题:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

思路:可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作,例如 :

1 2 3
4 5 6
7 8 9

利用pop输出并且删除第一行后,再进行一次逆时针旋转,就变成:

6 9
5 8
4 7

然后,继续重复上述操作即可。

最主要的在于实现矩阵的逆时针操作。关于矩阵的旋转有好几种,转置、顺时针、逆时针,下面直接上代码,用一行python代码实现这三种操作。

矩阵转置:

matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix = map(list, zip(*matrix))
print(matrix)
 
>>>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

矩阵顺时针旋转:先把矩阵上下翻转,然后在转置一下

matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix[::-1]))
print(matrix)
 
>>>[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

矩阵逆时针旋转:先把矩阵转置一下,然后在上下翻转

matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix))[::-1]
print(matrix)
 
>>>[[3, 6, 9], [2, 5, 8], [1, 4, 7]]

下面是完整的解题代码:

# -*- coding:utf-8 -*-
class Solution:
  # matrix类型为二维列表,需要返回列表
  def printMatrix(self, matrix):
    # write code here
    result = []
    while(matrix):
      result += matrix.pop(0)
      if not matrix or not matrix[0]:
        break
      # 将矩阵逆时针旋转
      matrix[:] = map(list, zip(*matrix))[::-1]
    return result

以上这篇Python一行代码解决矩阵旋转的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用reportlab实现图片转换成pdf的方法
May 22 Python
python发送邮件实例分享
Jul 28 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
python抓取网页中链接的静态图片
Jan 29 Python
python放大图片和画方格实现算法
Mar 30 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
Python 串口读写的实现方法
Jun 12 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
Numpy之将矩阵拉成向量的实例
Nov 30 #Python
numpy np.newaxis 的实用分享
Nov 30 #Python
Python如何使用函数做字典的值
Nov 30 #Python
关于Numpy中的行向量和列向量详解
Nov 30 #Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 #Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 #Python
python 实现多维数组转向量
Nov 30 #Python
You might like
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
php开启openssl的方法
2014/05/15 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
Javascript Object.extend
2010/05/18 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
如何更好的编写js async函数
2018/05/13 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
如何让python的运行速度得到提升
2020/07/08 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
信息技术培训感言
2014/03/06 职场文书
校长四风对照检查材料
2014/09/27 职场文书
民主生活会剖析材料
2014/09/30 职场文书
趵突泉导游词
2015/02/03 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
python glom模块的使用简介
2021/04/13 Python
angular异步验证器防抖实例详解
2022/03/31 Javascript
nginx lua 操作 mysql
2022/05/15 Servers