所以我在这里有这个数组:
t = [[8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8],
[49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0],
[81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65],
[52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91],
[22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80],
[24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50],
[32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70],
[67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21],
[24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72],
[21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95],
[78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92],
[16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57],
[86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58],
[19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40],
[4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66],
[88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69],
[4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36],
[20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16],
[20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54],
[1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48]]
这只是一个二维列表,我需要做的是以任何方式找到与数字对角线的四个数字。
我使用 xy 坐标获取数字,然后获取它周围的数字,我认为这很容易。
我尝试做的是获取数字,然后找到其他 3 个数字,我这样做四次,每个方向
这是我尝试让它工作的代码,但它不想得到正确的数字。
def getD(t,x,y):
z = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
xm = 1
ym = 1
for a in range(0,4):
if a == 0:
xm = 1
ym = 1
elif a == 1:
xm = 1
ym = -1
elif a == 2:
xm = -1
ym = 1
elif a == 3:
xm = -1
ym = -1
for b in range(0,4):
z[a][b]=t[y+(b*ym)][x+(b+xm)]
print z
ym
xm
是我们要移动的方向,所以如果是xm
-1,就向左,如果是1,就向右,如果ym
是-1,就向下,否则向上。
有人有办法做到这一点吗?
如果我这样做getD(t, 0, 0)
了,我会回来[[2, 99, 73, 4], [2, 54, 29, 72], [8, 49, 49, 95], [8, 1, 73, 36]]
我将如何发出无效的?例如,当它是getD(t,0,0)
并且我只想要向下和向右的对角线,因为其他人不可能是正确的?
这是数组的格式化版本
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
假设我想要(0,0)
[顶角] 的所有对角线使用getD(t,0,0)
使用上面的代码,我想要一些类似的东西:
[[0, 0, 0, 0], [8, 49, 31, 23], [0, 0, 0, 0], [0, 0, 0, 0]]
或者如果我想在点(19,19)
[最后一个底角] 使用对角线getD(t, 19, 19)
使用上面的代码,我想要一些类似的东西:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [48, 5, 4, 40]]