python 实现矩阵按对角线打印


Posted in Python onNovember 29, 2019

如下所示:

Description:
将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题)
Example:
Input:
[
[1,2,3,4],
[5,1,2,3],
[9,5,1,2]
]
Output:
[[4],
[3, 3],
[2, 2, 2],
[1, 1, 1],
[5, 5],
[9]]

思路: 考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j从col-1开始遍历,首先考虑j的变化,若j变为0,则保持不变,让i变化。在确定开头元素后,可通过设置i+1,j+1及不超过范围来向lst中对角线上添加元素。

对于以上例子,各对角线开头元素的index分别为:

(0,3)
(0,2)
(0,1)
(0,0)
(1,0)
(2,0)

其中各lst中的元素index分别为:

[(0,3)]
[(0,2),(1,3)]
[(0,1),(1,2),(2,3)]
[(0,0),(1,1),(2,2)]
[(1,0),(2,1)]
[(2,0)]

代码:

def diagonal_right(matrix):
 if not matrix:
  return []
 row = len(matrix)
 col = len(matrix[0])
 col2 = col
 result = []
 for i in range(row):
  for j in range(col2 - 1, -1, -1): #j倒序遍历
   lst = []
   i1,j1 = i,j #i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择
   while i1 <= row - 1 and j1 <= col - 1:
    lst.append(matrix[i1][j1])
    j1 += 1
    i1 += 1
   result.append(lst)
   if i == 0 and j == 0:#当遍历完(0,0)开头的一条对角线后,让j固定为0
    col2 = 1
 return('the result is: %s'%result,'end')
 
#test
print(diagonal_right([[1],[2]]))
print(diagonal_right([[1]]))
print(diagonal_right([
 [1,2,3,4],
 [5,1,2,3],
 [9,5,1,2]
]))

输出:

python 实现矩阵按对角线打印

变型: 由(0,0)开始向左打印:

思路: 同样考虑每条对角线开头元素的index(i,j)。i从0开始遍历,j也从0开始遍历,首先考虑j的变化,若j变为col-1,则保持不变,让i变化。在找到开头元素后,可通过设置i+1,j-1及不超过范围来向lst中对角线上添加元素。

对于以上例子,各对角线开头元素的index分别为:

(0,0)
(0,1)
(0,2)
(0,3)
(1,3)
(2,3)

其中各lst中的元素index分别为:

[(0,0)]
[(0,1),(1,0)]
[(0,2),(1,1),(2,0)]
[(0,3),(1,2),(2,1)]
[(1,3),(2,2)]
[(2,3)]

代码:

def diagonal_left(matrix):
 if not matrix:
  return []
 row = len(matrix)
 col = len(matrix[0])
 k=0
 result = []
 for i in range(row):
  for j in range(k,col): # j顺序遍历
   lst = []
   i1, j1 = i, j # i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择
   while i1 <= row - 1 and j1 >=0:
    lst.append(matrix[i1][j1])
    j1 -= 1
    i1 += 1
   if i==0 and j==col-1:
    k=col-1
   result.append(lst)
 return ('the result is: %s' % result, 'end')

# test
print(diagonal_left([[1],[2]]))
print(diagonal_left([[1]]))
print(diagonal_left([
 [1,2,3,4],
 [5,1,2,3],
 [9,5,1,2]
]))

输出:

python 实现矩阵按对角线打印

此问题还可以有多种变型,若从左下角,右下角按对角线打印等,只需要进行简单的修改即可实现。

以上这篇python 实现矩阵按对角线打印就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现批量转换文件编码(批转换编码示例)
Jan 23 Python
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
python获取Pandas列名的几种方法
Aug 07 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
Python实现不规则图形填充的思路
Feb 02 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 Python
python之列表推导式的用法
Nov 29 #Python
python 实现方阵的对角线遍历示例
Nov 29 #Python
python 实现一个反向单位矩阵示例
Nov 29 #Python
python 实现矩阵填充0的例子
Nov 29 #Python
python循环嵌套的多种使用方法解析
Nov 29 #Python
python写一个随机点名软件的实例
Nov 28 #Python
关于Python-faker的函数效果一览
Nov 28 #Python
You might like
php二分法在IP地址查询中的应用
2008/08/12 PHP
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
js实现一键复制功能
2017/03/16 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
vue + element-ui的分页问题实现
2018/12/17 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
使用Python生成随机密码的示例分享
2016/02/18 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
python实现简单flappy bird
2018/12/24 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
JAVA中的关键字有什么特点
2014/03/07 面试题
培训楼经理岗位责任制
2014/02/10 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
Golang 对es的操作实例
2022/04/20 Golang