本文实例为大家分享了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