Восстановление порядка столбцов матрицы в Python - PullRequest
1 голос
/ 09 июля 2019

Я хотел бы инвертировать порядок каждого столбца матрицы следующим образом:

A = [[ 4,  8, 12, 16],
     [ 3,  7, 11, 15],
     [ 2,  6, 10, 14],
     [ 1,  5,  9, 13]]

Требуемый результат:

A = [[ 1,  5,  9, 13],
     [ 2,  6, 10, 14],
     [ 3,  7, 11, 15],
     [ 4,  8, 12, 16]]

Как видно, каждый столбец изменил свой порядок.

Я использую для этого следующий код:

B = [row[:] for row in A]

k = 0
for i in range(len(A), -1, -1):
    k = k + 1,
    for j in (range(len(A))):
        B[k, j] = A[i, j]

print(B)

Однако я получаю следующую ошибку:

TypeError                                 Traceback (most recent call last)
<ipython-input-91-72c0a8d534ec> in <module>()
      9     k = k + 1,
     10     for j in range(len(A)):
---> 11         B[k, j] = A[i, j]
     12 
     13 print(B)

TypeError: list indices must be integers or slices, not tuple

1 Ответ

1 голос
/ 09 июля 2019

A - это вложенный список, а не пустой массив.Чтобы перевернуть его вертикально, переверните внешний список:

A = A[::-1]

Чтобы сделать полную копию:

B = [list(row) for row in A[::-1]]

Вы можете заменить list(row) на row[:] или row.copy().

Если вы просто хотите правильно выполнить двумерную индексацию, вам нужно передать отдельный индекс каждому объекту во вложенной структуре:

B[k][j] = A[i][j]

Индекс [k, j] действительно [(k, j)].Массив Numpy может принимать кортеж в своем индексе, но список объектов не может, как вам говорит ошибка.Вместо этого вам нужно получить доступ к каждому подсписку отдельно.B[k] является ссылкой на вложенный список, поэтому вы можете присвоить ему элемент с помощью B[k][j] = ....

Вы также можете быть осторожны с тем, как вы строите свой внешний цикл.Выражение range(len(A), -1, -1) начинается с len(A), что находится за пределами вашего списка (по определению).Вы, вероятно, хотите использовать range(len(A) - 1, -1, -1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...