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下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
遗传算法python版
Mar 19 Python
简单谈谈Python的pycurl模块
Apr 07 Python
使用Python自动化破解自定义字体混淆信息的方法实例
Feb 13 Python
详解python中list的使用
Mar 15 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
python 递归相关知识总结
Mar 03 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 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
收音机术语解释
2021/03/01 无线电
简单的PHP多图上传小程序代码
2011/07/17 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
php 中的closure用法详解
2017/06/12 PHP
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
python thread 并发且顺序运行示例
2009/04/09 Python
python文件和目录操作方法大全(含实例)
2014/03/12 Python
python中实现php的var_dump函数功能
2015/01/21 Python
python实现list由于numpy array的转换
2018/04/04 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
学校出纳员岗位职责
2014/03/18 职场文书
教师党员公开承诺书
2014/03/25 职场文书
数学教育专业求职信
2014/07/22 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
房租涨价通知
2015/04/23 职场文书
农村党员干部承诺书
2015/05/04 职场文书