def transforming(matrix, *args, not_transform=(), **kwargs):
def apply_transformations(element):
for func_name, indices in args:
if func_name in kwargs:
func = kwargs[func_name]
if func_name not in not_transform:
for index in indices:
element[index] = func(element[index])
return element
return [apply_transformations(row) for row in matrix]
initial_matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
def square(x):
return x ** 2
def double(x):
return x * 2
transformed_matrix = transforming(initial_matrix, ('square', (0, 2)), ('double', (1,)), not_transform=('double',), square=square, double=double)
print(transformed_matrix)