Вывести элементы списка матрицей по 4 елемента

Столкнулся с небольшой проблемой. Нужно вывести элементы списка матрицей (по 4 элемента в строчке), в независимости от того, сколько их нужно вывести(хоть 1, хоть 10000). Вот мой нынешний код:

from tabulate import tabulate

def numbers(n):
    print("Варіант виводу:\n1-списком\n2-матрицею\n3-к-ть")
    v=int(input(""))
    num=[]
    matr_num=[]

    for i in range(1,n+1):
        num.append(i)

    if v==1:
        print(num)
    elif v==2:
        for i in num:
            matr_num.append([num[i],num[i+1],num[i+2],num[i+3]])
            print(tabulate(list(zip(matr_num)),tablefmt='fancy_grid'))
    elif v==3:
        print(len(num))

n=int(input("n="))
numbers(n)

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

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

Ваш первый вариант:

print(tabulate(list(zip(num)),tablefmt='fancy_grid'))

выводил все в столбик, т.к. для tabulate нужен двумерный массив;
Второй вариант (нынешний):

num=[]
for i in num:
    matr_num.append([num[i],num[i+1],num[i+2],num[i+3]])

выдает ошибку:

IndexError: list index out of range

т.к. вы пытаетесь итерироваться по пустому списку, у которого нет num[i+1] и т.д...

Попробуйте сначала сформировать матрицу (2D-массив), так, например:

n = int(input("n="))
my_list = [list(range(i, i+4)) for i in range(1, n, 4)]

где n - введенное количество элементов (дополниться до кратного четырем);
При n = 11 в my_list будет:

[
    [1, 2, 3, 4], 
    [5, 6, 7, 8], 
    [9, 10, 11, 12]
]

Результат вывода с tabulate:

>>> print(tabulate(my_list, tablefmt='fancy_grid'))
╒═══╤════╤════╤════╕
│ 1 │  2 │  3 │  4 │
├───┼────┼────┼────┤
│ 5 │  6 │  7 │  8 │
├───┼────┼────┼────┤
│ 9 │ 10 │ 11 │ 12 │
╘═══╧════╧════╧════╛
→ Ссылка