Сдвиг элементов матрицы по строкам и столбцам на Python
В квадратной матрице (список списков) размером 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]
Источник: Stack Overflow на русском