Ошибка индекса при переносе матрицы в скрипте - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть программа, которая транспонирует квадратную матрицу:

matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix _trans = []

for i in range (len (matrix)):
     for j in range (len (matrix)):
         matrix_trans [j] [i] = matrix [i] [j]

Ошибка:

IndexError: list index out of range

Почему здесь возникает эта ошибка?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Это происходит из-за matrix_trans[j][i], на первой итерации и j, и i будут равны нулю, а matrix_trans - пустой список, поэтому matrix_trans[0] вызовет ошибку индекса, у вас должна быть копияизмерений вашей первой матрицы в страте, например:

from copy import deepcopy
matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix_trans = deepcopy(matrix)

for i in range(len(matrix)):
     for j in range(len(matrix)):
         matrix_trans[j][i] = matrix[i][j]

результат:

In [41]: matrix_trans
Out[41]: [[1, 3, 6], [2, 6, 8], [4, 9, 2]]

In [42]: matrix
Out[42]: [[1, 2, 4], [3, 6, 9], [6, 8, 2]]

для получения дополнительной информации о copy читайте модуль Документы

Также обратите внимание, что для этого действия вы можете использовать Python zip.как это:

list(zip(*matrix))
0 голосов
/ 17 ноября 2018

Проблема в том, что matrix_trans - это просто и пустой список, поэтому вы не можете получить доступ к любому индексу, вместо этого создайте копию matrix:

matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix_trans = [x[:] for x in matrix]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...