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 相关文章推荐
Linux下多个Python版本安装教程
Aug 15 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
python+Splinter实现12306抢票功能
Sep 25 Python
django中media媒体路径设置的步骤
Nov 15 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
在python中使用nohup命令说明
Apr 16 Python
python对接ihuyi实现短信验证码发送
May 10 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
python如何求100以内的素数
May 27 Python
python实现图片转换成素描和漫画格式
Aug 19 Python
python3 sqlite3限制条件查询的操作
Apr 07 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命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
js实现简单扫雷
2020/11/27 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
python DataFrame 取差集实例
2019/01/30 Python
Python各种扩展名区别点整理
2020/02/27 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
文明生主要事迹
2014/05/25 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
关于Python使用turtle库画任意图的问题
2022/04/01 Python
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL