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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python 多进程通信模块的简单实现
Feb 20 Python
python实现文件名批量替换和内容替换
Mar 20 Python
Python中捕捉详细异常信息的代码示例
Sep 18 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
Django框架模板介绍
Jan 15 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
Python类的动态绑定实现原理
Mar 21 Python
Python实现汇率转换操作
May 03 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 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&&mysql)一
2006/10/09 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
jquery ready()的几种实现方法小结
2010/06/18 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
英国健身超市:Fitness Superstore
2019/06/17 全球购物
Ruby如何进行文件操作
2014/07/17 面试题
学生会部长竞聘书
2014/03/31 职场文书
个人担保书格式范文
2014/05/12 职场文书
三方合作意向书范本
2015/05/09 职场文书
教师节联欢会主持词
2015/07/04 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
一文搞懂php的垃圾回收机制
2021/06/18 PHP