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

Мне надо сделать так, чтобы в таблице, когда любая из частей колонки была больше остальных, то колонка полностью становилась её размеров, а не указаных.


def make_table():
    table_data = [
        ['1', '2', '3'],
        ['4', '5', '6'],
        ['7', '8', '9']
    ]
    print('┌', end = '')
    print("─"*9, end='')
    print('┬', end='')
    print("─"*8, end='')
    print('┬', end='')
    print("─"*8, end='')
    print('┐')
    print("│", end=' ')
    headers = ['val1', 'val2', 'val3']
    for column in headers:
        print(column.center(8), end="│")
    print('')
    print('├', end='')
    print("─"*9, end='')
    print('┼', end='')
    print("─"*8, end='')
    print('┼', end='')
    print("─"*8, end='')
    print('┤')
    for row in table_data:
        print("│ ", end=' ')
        for column in row:
            print(column.center(6, ' '), end=" │ ")
        print('')
    print('└', end = '')
    print("─" * 9, end = '')
    print('┴', end='')
    print("─"*8, end='')
    print('┴', end='')
    print("─"*8, end='')
    print('┘')
make_table()

я получаю в таком случае: Правильный вывод

Но стоит мне сделать что-то большим я получаю? Не правильный вывод


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

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

Ладно, поизобретаю велосипед...

def make_table(header, data): 
    cols = len(header)
    lengths = [max(map(len, map(str, col)))+2 for col in zip(*([header] + data))]
    print    ('┌'+'┬'.join('─'*lengths[i]              for i      in range(cols))      +'┐')
    print    ('│'+'│'.join(str(txt).center(lengths[i]) for i, txt in enumerate(header))+'│')
    print    ('├'+'┼'.join('─'*lengths[i]              for i      in range(cols))      +'┤')
    for row in data:
        print('│'+'│'.join(str(txt).center(lengths[i]) for i, txt in enumerate(row))   +'│')
    print    ('└'+'┴'.join('─'*lengths[i]              for i      in range(cols))      +'┘')


make_table(['val1', 'val2', 'val333333333'],
           [['1', '2', '3'],
            ['4', 55555555, '6'], 
            [7, 8, 9]]
)
┌──────┬──────────┬──────────────┐
│ val1 │   val2   │ val333333333 │
├──────┼──────────┼──────────────┤
│  1   │    2     │      3       │
│  4   │ 55555555 │      6       │
│  7   │    8     │      9       │
└──────┴──────────┴──────────────┘
→ Ссылка