похоже, что вы можете использовать повтор .
from itertools import chain, repeat
def table_indexes(items, ncol):
cols = chain.from_iterable(repeat(range(ncol), len(items)//ncol + 1))
for x, (col, item) in enumerate(zip(cols, items)):
yield x//ncol, col, item
items = ["Apple", "Orange", "Pear", "Strawberry", "Banana"]
list(table_indexes(items, 3))
выход:
[(0, 0, 'Apple'),
(0, 1, 'Orange'),
(0, 2, 'Pear'),
(1, 0, 'Strawberry'),
(1, 1, 'Banana')]
более подробно, повтор дает нам список столбцов
repeat(range(ncol), len(items)//ncol + 1)
-> [[0, 1, 2], [0, 1, 2]]
и пока мы перебираем перечисление элементов, конструкция x // ncol
дает нам номер строки.