Создание матрицы списков

Всем привет! Застрял на задачке по циклам. Не могу понять как заполнять строки матрицы числами, согласно представленного на скрине правила

Суть задачи: На вход программе подаются два натуральных числа ? и ?. Напишите программу, которая создает матрицу размером ?×?, заполнив её в соответствии с образцом. Вот что у меня пока получилось:

def create_matrix(n, m):
  matrix = []
  for i in range(n):
    row = [m] * m
    matrix.append(row)
  return matrix

Образец ниже. Прошу извинить за корявый формат кода, на телефоне не работют кнопки оформления

образец матрицы


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

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

Для начала сделаем традиционное добавление элементов в список. Такой код проще отлаживать.

Каждый элемент зависит и от номера строки и от номера столбца. Использование остатка от деления %m позволяет ограничить диапазон чисел и обеспечить цикличность.

def create_matrix(n, m):
    matrix = []
    for i in range(n):
        row = []
        for j in range(m):
            row.append((j+i)%m+1)
        matrix.append(row)
    return matrix

Теперь используем вложенные списковые включения (list comprehension), которые делают то же самое:

def create_matrixx(n, m):
    return [[(j+i)%m+1 for j in range(m)] for i in range(n)]
→ Ссылка
Автор решения: IT_Master_D

Если нужен форматированный вывод как в примере, то в первую функцию, которую для Вас написал MBo, добавьте следующий код:

for idx, el in enumerate(matrix):
    el = map(str, el)
    matrix[idx] = " ".join(el)

return "\n".join(matrix)
→ Ссылка