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实现计算两个时间之间相差天数的方法
May 10 Python
Python实现查看系统启动项功能示例
May 10 Python
python中int与str互转方法
Jul 02 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python实现websocket的客户端压力测试
Jun 25 Python
学习和使用python的13个理由
Jul 30 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
Python流程控制语句的深入讲解
Jun 15 Python
python字符串的一些常见实用操作
Apr 06 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 print EOF实现方法
2009/05/21 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python中 Lambda表达式全面解析
2016/11/28 Python
Python 闭包的使用方法
2017/09/07 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
网络事业创业计划书范文
2014/01/09 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
家长写给老师的建议书
2014/03/13 职场文书
经典洗发水广告词
2014/03/13 职场文书
早恋主题班会
2015/08/14 职场文书