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命令行交互提示符的方法
Jan 14 Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
Python中unittest模块做UT(单元测试)使用实例
Jun 12 Python
Python写的一个简单监控系统
Jun 19 Python
Python实现文件按照日期命名的方法
Jul 09 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 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
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
python实现RSA加密(解密)算法
2016/02/17 Python
tensorflow更改变量的值实例
2018/07/30 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
python实现一个猜拳游戏
2020/04/05 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
带薪年假请假条
2014/02/04 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis