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实现udp数据报传输的方法
Sep 26 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
Python字符串的常见操作实例小结
Apr 08 Python
python3对接mysql数据库实例详解
Apr 30 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
python实现大量图片重命名
Mar 23 Python
python小白学习包管理器pip安装
Jun 09 Python
python实现移动木板小游戏
Oct 09 Python
python爬虫基础之urllib的使用
Dec 31 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
浅谈Python类的单继承相关知识
May 12 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中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
基于jquery自定义图片热区效果
2012/07/21 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python+django加载静态网页模板解析
2017/12/12 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
Python格式化日期时间操作示例
2018/06/28 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
类和结构的区别
2012/08/15 面试题
外包公司软件测试工程师
2014/11/01 面试题
消防安全员岗位职责
2014/03/10 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
销售业务员岗位职责
2015/02/13 职场文书
办公室主任个人总结
2015/02/28 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python