Вывести элементы списка матрицей по 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 │
╘═══╧════╧════╧════╛