Проблема с выводом вертикальной таблцы пифагора через вложенные списки (python3)

Имеется следующий код:

def fill_1(text):
    a, b = [int(i) for i in text.split(" ")]
    nums = [str(i) for i in range(1, a * b + 1)]
    matrix = [[] for _ in range(b)]
    for j in range(b):
        for i in range(a):
            matrix[i].append(nums[0].ljust(3))
            nums.remove(nums[0])
    for i in range(a):
        print(" ".join(matrix[i]))


fill_1(input())

Если на ввод подается строка, где a <= b, то все выводится корректно, например:

input: 4 5
output:

    1   5   9   13  17 
    2   6   10  14  18 
    3   7   11  15  19 
    4   8   12  16  20 

если же a > b, то на выводе следующая ошибка, например:

input: 5 4
output:

Traceback (most recent call last):
  File "file.py", line 13, in <module>
    fill_1(input())
  File "file.py", line 7, in fill_1
    matrix[i].append(nums[0].ljust(3))
IndexError: list index out of range

Судя по имени ошибки, проблема в том, что счетчик выходит за границу списка, однако это не так, что делать?


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

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

Вы создаёте матрицу с количеством строк = b: matrix = [[] for _ in range(b)]
A итерируетесь по ним до значения a: for i in range(a): matrix[i].append(...)
Так что поправьте на:

matrix = [[] for _ in range(a)]
→ Ссылка
Автор решения: pankazimierz

Cпасибо @GrAnd за помощь

def fill_1(text):
    a, b = [int(i) for i in text.split(" ")]
    nums = [str(i) for i in range(1, a * b + 1)]
    matrix = [[] for _ in range(a)]
    for j in range(b):
        for i in range(a):
            matrix[i].append(nums[0].ljust(3))
            nums.remove(nums[0])
    for i in range(a):
        print(" ".join(matrix[i]))


fill_1(input())
→ Ссылка