Как сделать, чтобы колонка была в таблице по размеру наибольшего объекта списка?
Мне надо сделать так, чтобы в таблице, когда любая из частей колонки была больше остальных, то колонка полностью становилась её размеров, а не указаных.
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 │
└──────┴──────────┴──────────────┘
