@anya_hacker

Почему IndexError при заполнении массива?

Есть матрица (список списков).
Необходимо изменить числа на главной диагонали: если число меньше нуля, то заменить на 0, иначе на единицу.
Пример:
Ввод:
[
  [-1,  4, -5, -9,  3 ],
  [ 6, -4, -7,  4, -5 ],
  [ 3,  5,  0, -9, -1 ],
  [ 1,  5, -7, -8, -9 ],
  [-3,  2,  1, -5,  6 ]
]


Вывод:
[
  [ 0,  4, -5, -9,  3 ],
  [ 6,  0, -7,  4, -5 ],
  [ 3,  5,  1, -9, -1 ],
  [ 1,  5, -7,  0, -9 ],
  [-3,  2,  1, -5,  1 ]
]

Главная диагональ - с левого верхнего угла в правый нижний
Написала программу, где создается новая матрица с числами.
Но при обращении к индексу списка (он пустой изначально) вылетает исключение.
Почему пишет indexerror?
Код:
def res(m):
    matrix = [[] for _ in range(len(m))] # новая пустая матрица
    for i in range(len(m)):
        for j in range(len(m[i])):
            if i == j and m[i][j] < 0: # i - индекс списка в матрице, j - индекс элем. в конкретном сп.
                matrix[i][j] = 0 # новый элемент, равный нулю. Здесь и вылетает исключение
            elif i == j and m[i][j] >= 0:
                matrix[i][j] = 1
            else:
                matrix[i][j] = m[i][j]
    return matrix


print(res([
    [-1, 4, -5, -9, 3],
    [6, -4, -7, 4, -5],
    [3, 5, 0, -9, -1],
    [1, 5, -7, -8, -9],
    [-3, 2, 1, -5, 6]
]))


Исключение:
matrix[i][j] = 0
IndexError: list assignment index out of range
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
В питоне так не делается, чтобы добавить элемент в список, используйте метод .append()

if i == j and m[i][j] < 0: # i - индекс списка в матрице, j - индекс элем. в конкретном сп.
    matrix[i].append(0)
elif i == j and m[i][j] >= 0:
    matrix[i].append(1)
else:
    matrix[i].append(m[i][j])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы