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读取csv文件示例(python操作csv)
Mar 11 Python
python中使用smtplib和email模块发送邮件实例
Apr 22 Python
让Python代码更快运行的5种方法
Jun 21 Python
python与php实现分割文件代码
Mar 06 Python
详解Python import方法引入模块的实例
Aug 02 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
python 三元运算符使用解析
Sep 16 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 Python
python 3.8.3 安装配置图文教程
May 21 Python
python求numpy中array按列非零元素的平均值案例
Jun 08 Python
Python return语句如何实现结果返回调用
Oct 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 header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
php页面防重复提交方法总结
2013/11/25 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
学习ExtJS table布局
2009/10/08 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
js日期联动示例
2014/05/02 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
老生常谈Python基础之字符编码
2017/06/14 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
机械电子工程毕业生自荐信
2013/11/23 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
小学推普周活动总结
2015/05/07 职场文书
焦点访谈观后感
2015/06/11 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
python数字图像处理之图像的批量处理
2022/06/28 Python
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android