IndexError при переборе матрицы по индексу

У меня есть двумерная матрица:

[['a0' 'a1' 'a2']

 ['b0' 'b1' 'b2']

 ['c0' 'c1' 'c2']]

Я пытаюсь создать словарь, где ключ - элемент матрицы, а значение - список связанных элементов (правого и нижнего соседа). Если правого или нижнего соседа нет, связанный список должен содержать только один элемент. Почему-то я в блоке else: получаю значение x==2, и соответственно ошибку в 19 строчке: IndexError: index 3 is out of bounds for axis 0 with size 3. Хотя это значение x должно обрабатываться в первом блоке if.

Что я делаю не так?

```
import numpy as np

''' Создаю матрицу с помощью модуля numpy.'''
list_1 = [['a0', 'a1', 'a2'], ['b0', 'b1', 'b2'], ['c0', 'c1', 'c2']]
matrix = np.array(list_1)
dict = {}
''' Перебираю значения "x" и "y" для перебора элементов матрицы по индексу.'''
for x in range(3):      
    for y in range(3):
            a = matrix[x][y]
            if x == 2:
                d = matrix[x][y+1]
                dict[a] = (d)
            if y == 2:
                c = matrix [x+1][y]
                dict[a] = (c)
            else:
                print(x)
                c = matrix [x+1][y]
                d = matrix[x][y+1]
                dict[a] = (c, d)
print(dict)

Ответы (2 шт):

Автор решения: Zhihar
matrix = [
    ['a0', 'a1', 'a2'],
    ['b0', 'b1', 'b2'],
    ['c0', 'c1', 'c2']
]

data = dict()

for j in range(3):
    for i in range(3):
        a = matrix[i][j]

        if a not in data:
            data[a] = [a]

        if i < 2:
            data[a].append(matrix[i + 1][j])

        if j < 2:
            data[a].append(matrix[i][j + 1])

print(data)

а у вас в условии, как мне кажется, ошибка:

        if x == 2:
            d = matrix[x][y+1]
            dict[a] = (d)
        if y == 2:
            c = matrix [x+1][y]
            dict[a] = (c)

например:

        if x == 2:
            d = matrix[x][y+1]
            dict[a] = (d)

т.е. на y у вас нет ограничения и при y == 2 конечно происходит выход за диапазон

скорее всего имелось в виду следующее:

        if y < 2:
            d = matrix[x][y+1]
            dict[a] = (d)

обратите внимание еще на то, что у вас именно равенство (x == 2, y == 2), а должно быть неравенство - вы же проверяете выход за диапазон и если его нет, тогда делаете какие-то действия

→ Ссылка
Автор решения: Эникейщик

Значение x никак не влияет на то, выполняется else или нет. Блок else относится к if y == 2, поэтому выполняется всегда, когда y не равен 2, и не имеет значения чему равен х, хоть 0, хоть 2.

→ Ссылка