本文实例为大家分享了python实现二维数组的对角线遍历,供大家参考,具体内容如下
第一种情况:从左上角出发,右下角结束
要完成的事情,就像下图:
话不多说,直接上python实现代码与结果展示:
1
2
3
4
5
6
7
8
9
10
11
|
# 输出遍历的索引与其对应的值 a = [[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]] n = len (a) for i in range (n + n - 1 ): for j in range (i + 1 ): k = i - j if k<n and k> = 0 and j<n: print ( "对应索引:" ,j,k, " 对应值:" ,a[j][k]) |
第二种情况:从右上角出发,左下角结束
情况如下:
原以为这一种的解决方式会和上一种的一样的简单,但是尝试一下失败了,只有一个“曲线救国”的解决办法:依据索引关系输出结果
自己的python实现代码与结果展示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
a = [[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]] # 得到下标索引 size = len (a) list_i = [] # 第一索引 list_j = [] # 第二索引正序 l1 = [] # 第二索引逆序 for m in range ( 2 * size - 1 ): for n in range (m + 1 ): k = m - n if k<size and k> = 0 and n<size: list_i.append(n) list_j.append(k) print ( "第一索引i:\n" , list_i) print ( "第二索引j:" ) for i in range ( len (list_j)): a = list_j.pop() l1.append(a) print (l1, "\n" * 2 , "输出结果如下:" ) for i in range ( len (list_i)): print (a[list_i[i]][l1[i]], end = " " ) |
前辈jiaobuchong的python实现代码与结果展示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
arr1 = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 9 , 10 , 11 , 12 ], [ 13 , 14 , 15 , 16 ]] for each_arr in arr1: print (each_arr) tem_arr = [] # 用来记录数组值 rows = len (arr1) cols = len (arr1[ 0 ]) def isvalidindex(x, n): return (x > = 0 and x < n) # 每一行的每个值的数组下标的差都一样, for i in range (cols * 2 - 1 ): # 共输出 cols * 2 - 1 行 diff = cols - i - 1 # 每一行的差 for j in range (cols): # 数组中每一个值的下标范围是0到cols k = j - diff # 通过一个下标值计算另一个下标值 if isvalidindex(k, rows): # 剩下就是判断这些下标值是否满足当前的情况, 这一步不怎么好理解 print (arr1[k][j], ' ' , end = '') print () |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/zzZ_CMing/article/details/81035354