Помогите оптимизировать рабочий код python
Дан двумерный массив и два числа: i и j. Поменяйте в массиве столбцы с номерами i и j.
Входные данные
Программа получает на вход в первой строке размеры массива n≤100 и m≤100, затем элементы массива, а в последней строке числа i и j.
Выходные данные
Выведите полученный массив.
Не пойму, как сделать, чтобы s не уползало за рамки, так как если я понижу перебор до n-2, нарушается сам код
n,m=map(int,input().split())
a=[]
for i in range(n):
a.append(list(map(int,input().split())))
i,j=map(int,input().split())
for s in range(0,n):
m=a[(i-1)+s][j-1]
a[(i-1)+s][j-1]=a[(i-1)+s][j]
a[(i-1)+s][j]=m
for row in a:
for elem in row:
print(elem,end=' ')
print()
Ответы (2 шт):
Может поможет такое решение, конкретно к вашему коду не имеющее отношение. Воспользуюсь модулем numpy. Сделаем матрицу 5x5, для примера
import numpy as np
matrix2d = np.arange(25).reshape(5, 5)
print(matrix2d)
"""вывод
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
"""
Функция для замены столбцов может выглядеть вот так
def change_col(matrix, i, j):
matrix[:,[i, j]] = matrix[:,[j, i]]
Поменяем 2ой и 3ий
change_col(matrix2d, 2, 3)
print(matrix2d)
"""вывод
[[ 0 1 3 2 4]
[ 5 6 8 7 9]
[10 11 13 12 14]
[15 16 18 17 19]
[20 21 23 22 24]]
"""
Что-то у вас странное написано... Поменять элементы местами в общем случае записывается так: a, b = b, a.
В вашем случае делается простой проход по рядам и производится обмен содержимым между i-ым и j-ым элементами каждого ряда.
for row in range(n):
a[row][i], a[row][j] = a[row][j], a[row][i]