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中将阿拉伯数字转换成中文的实现代码
May 19 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
详解在Python程序中使用Cookie的教程
Apr 30 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
Dec 27 Python
Django之腾讯云短信的实现
Jun 12 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
django加载本地html的方法
2018/05/27 Python
python实现批量转换图片为黑白
2020/06/16 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Python常用断言函数实例汇总
2020/11/30 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
绿色家庭事迹材料
2014/05/01 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
先进事迹演讲稿
2014/09/01 职场文书
联欢会开场白
2015/06/01 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python