Сначала просмотрите эту матрицу 3x3, где каждый элемент содержит свою строку в первой цифре и столбец во второй цифре.
00 01 02
10 11 12
20 21 22
Элементы, которые вы хотите, расположены в следующем порядке:
00 10 01 20 11 02 21 12 22
Или с другой точки зрения:
00
10 01
20 11 02
21 12
22
Вы можете видеть, что в первом столбце чисел, приведенных выше, первые цифры 01222
.Это представляет range(3) + [2, 2]
.Теперь посмотрим на вторые цифры первого столбца.Они равны 00012
и представляют [0, 0] + range(3)
.
Также обратите внимание, что в каждой строке каждый элемент уменьшает свою первую цифру и увеличивает свою вторую цифру до тех пор, пока элемент не станет равным своему обратному.Вы можете увидеть это более четко в третьем ряду.Он начинается в 20
, идет в 11
и заканчивается в 02
, который является обратным к 20
, начальному числу.
Итак, вы можете сделать что-то вроде:
def toNumber(i, j):
return int(str(i) + str(j))
res = []
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
list1 = list(range(3)) + [2]*2
list2 = [0]*2 + list(range(3))
for i, j in zip(list1, list2):
inverse = int(str(toNumber(i, j))[::-1])
while True:
res.append(a[i][j])
if toNumber(i, j) == inverse:
break
i -= 1
j += 1
print(res)