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 шт):
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.