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中基础的socket编程实战攻略
Jun 01 Python
python flask 多对多表查询功能
Jun 25 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
flask中的wtforms使用方法
Jul 21 Python
基于python历史天气采集的分析
Feb 14 Python
Django实现单用户登录的方法示例
Mar 28 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
django queryset 去重 .distinct()说明
May 19 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
python数字图像处理之图像的批量处理
Jun 28 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
vue router demo详解
2017/10/13 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
python将视频转换为全字符视频
2019/04/26 Python
python3注册全局热键的实现
2020/03/22 Python
Python是怎样处理json模块的
2020/07/16 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
Java基础类库面试题
2013/09/04 面试题
俄罗斯商务邀请函
2014/01/26 职场文书
2016年教代会开幕词
2016/03/04 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python