Сдвиг элементов матрицы по строкам и столбцам на Python

Рейтинг: 1Ответов: 0Опубликовано: 02.02.2023

В квадратной матрице (список списков) размером N x N нужно реализовать смещение элементов по строкам и столбцам: в начало строки/столбца добавляется новый элемент, а последний элемент строки/столбца вытесняется.

Пример матрицы:

[[1 2 3 4],
 [1 2 3 4],
 [1 2 3 4],
 [1 2 3 4]]

Пример с добавлением нового элемента в начало второй строки:

[[1 2 3 4],
 [0 1 2 3],
 [1 2 3 4],
 [1 2 3 4]]

Пример с добавлением нового элемента в начало второго столбца:

[[1 0 3 4],
 [0 2 2 3],
 [1 1 3 4],
 [1 2 3 4]]

Смещение в строке можно сделать так:

matrix[i].insert(0, value)
matrix[i].pop()

Или через deque:

row = deque(matrix[i], len(matrix))
row.appendleft(value)
matrix[i] = list(row)

Пробовал сделать то же со столбцом:

col = deque(list(zip(*matrix))[i], len(matrix))

Но как впихнуть col обратно в матрицу?

Также можно повернуть матрицу (превратить столбцы в строки), сделать смещение в строке и повернуть матрицу обратно. Посоветуйте оптимальное решение. Спасибо!

Обновлено

Сделал так:

def shift_col(col, x):
    n = len(matrix)
    row = deque(list(zip(*matrix))[col], n)
    row.appendleft(x)
    for i in range(n):
        matrix[i][col] = list(row)[i]

Ответы

Ответов пока нет.