Преобразование матрицы для цикла - PullRequest
0 голосов
/ 28 мая 2020

Таким образом, изображение матрицы может быть преобразовано для строк и столбцов согласно этому правилу:

Значения в первой строке исходной матрицы становятся значениями последнего столбца матрицы изображения. Значения во второй строке исходной матрицы становятся значениями второго последнего столбца матрицы изображения…. и так далее ... пока значения в последней строке исходной матрицы не станут значениями первого столбца матрицы изображения.

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

 [['a', 'b', 'c'],           [['g', 'd', 'a'],
  ['d', 'e', 'f'],            ['h', 'e', 'b'],
  ['g', 'h', 'i']]            ['i', 'f', 'c']] 

Предположим, что в Python уже существует следующее:

матрица: список списков 3 x 3, представляющих матрицу чисел (аналогично примерам выше )

изображение: список того же размера, что и матрица, содержащий только пустые подсписки (для хранения изображения матрицы)

индексы: список, содержащий целые числа 0, 1 и 2 (т.е. , действительные позиции индекса как матрицы, так и изображения)

Завершите следующий код, чтобы вернуть изображение матрицы в соответствии с указанным выше правилом.

for row in indexes:
    for ____ in ____:
        image[row].append(matrix[____] [____])

Возможные варианты:

row
col
0
1
2
len(indexes)
indexes
2 - col
2 - row
col - 2
row - 2
len(matrix)

Любой из вариантов может быть использован в пустых местах. Моя интуиция после времени обучения python подсказывает мне, что я должен попытаться ответить на вопрос как таковой:

for row in indexes:
    for col in indexes:
         image[row].append([col][row])

Я думаю, что произойдет то, что он примет все значения и переключит их для строки -> столбца и столбца -> строки. Я в чем-то прав или полностью выключен?

1 Ответ

1 голос
/ 28 мая 2020

Это немного сложно, так как это не совсем похоже на обычное транспонирование. Но это должно сработать для вас:

matr = [['a', 'b', 'c'],
        ['d', 'e', 'f'],
        ['g', 'h', 'i']]

rotated = [list(reversed(x)) for x in zip(*matr)]

print(rotated)

Вывод:

[['g', 'd', 'a'], ['h', 'e', 'b'], ['i', 'f', 'c']]

Или то же самое с использованием for-l oop:

matr = [['a', 'b', 'c'],
        ['d', 'e', 'f'],
        ['g', 'h', 'i']]

rotated = []
for x in zip(*matr):
    rotated.append(list(reversed(x)))

print(rotated)

Вывод:

[['g', 'd', 'a'], ['h', 'e', 'b'], ['i', 'f', 'c']]
...