Помогите с объяснением задачи

Задача "Заполнение змейкой" Условие: По данным числам nn и mm заполните двумерный массив размером n×m числами от 1 до n×mn×m “змейкой”, как показано в примере. входные и выходные данные

n = int(input('Введите число строк(n) ')) 
m = int(input('Введите число столбцов(m) '))
for j in range(n):
        print(' '.join([str(i + 1 + m * j) for i in range(m)][::pow(-1, j)]))

Пожалуйста, подробно объясните решение данной задачи. Как можно подробнее. Заранее спасибо)


Ответы (1 шт):

Автор решения: Zhihar

надо заполнить матрицу сначала слева направо, потом справа налево, потом слева направо и т.д.

сначала проходим по всем строкам (n штук)

for j in range(n):

для каждой строки формируем строку в виде списка чисел (вернее чисел переведённых в строки)

[str(i + 1 + m * j) for i in range(m)][::pow(-1, j)]

потом все числа из списка соединяем в одну строку через разделитель пробел

текущий номер числа вычисляется по формуле:

i + 1 + m * j

для всех нечётных строк переворачивается сформированная строка

[::pow(-1, j)]

это срез строки в которую входят все символы строки, но в обратном направлении, если j нечётное иначе в прямом направлении

P.S.

кстати можно обойтись и без join и без срезов строки:

т.е. можно все сделать одной формулой

for j in range(n):
        print(*[j * m + i + 1 + (j % 2) * (m - 2 * i - 1) for i in range(m)], sep=' ')

т.е. формируется строка чисел (именно чисел, а не строк) и выводится через разделитель пробел

→ Ссылка