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编码时应该注意的几个情况
Mar 04 Python
python实现多线程采集的2个代码例子
Jul 07 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
python集合删除多种方法详解
Feb 10 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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 gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
开启PHP的伪静态模式
2015/12/31 PHP
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
JS实现小米轮播图
2020/09/21 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
python代码制作configure文件示例
2014/07/28 Python
python回调函数用法实例分析
2015/05/09 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
微信跳一跳游戏python脚本
2020/04/01 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
用python实现学生管理系统
2020/07/24 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
介绍下static、final、abstract区别
2015/01/30 面试题
学生励志演讲稿
2014/01/06 职场文书
安全生产目标责任书
2014/04/14 职场文书
企业文化标语大全
2014/06/10 职场文书
金融与证券专业求职信
2014/06/22 职场文书
会议欢迎词范文
2015/01/27 职场文书
司机个人年终总结
2015/03/03 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP