longest = len(max(l))
for col1, col2, col3 in zip(l[::3],l[1::3],l[2::3]):
    print('{:^20}|{:^20}|{:^20}'.format(col1,col2,col3))

Как я могу использовать longest вместо 20, чтобы мое форматирование всегда подходило? Я также не хочу, чтобы мой код выглядел уродливо, поэтому, если возможно, используйте форматирование или какой-либо другой способ.

4
lol 12 Янв 2017 в 16:12

4 ответа

Лучший ответ

Вы можете передать ширину прямо в формате:

for cols in zip(l[::3],l[1::3],l[2::3]):
    print('{:^{width}}|{:^{width}}|{:^{width}}'.format(*cols,width=longest))

(адаптировано из примера, приведенного в документации)

И вам не нужно распаковывать столбцы вручную. Просто распакуйте их с * в вызове format.

4
Jean-François Fabre 12 Янв 2017 в 13:34

Форматы могут быть вложенными:

longest = len(max(l))
for col1, col2, col3 in zip(l[::3],l[1::3],l[2::3]):
    print('{:^{len}}|{:^{len}}|{:^{len}}'.format(col1,col2,col3, len=longest))
3
Daniel 12 Янв 2017 в 13:27
longest = len(max(l))

# tpl will be '{:^20}|{:^20}|{:^20}'
tpl = '{{:^{longest}}}|{{:^{longest}}}|{{:^{longest}}}'.format(longest=longest)
for col1, col2, col3 in zip(l[::3],l[1::3],l[2::3]):
    print(tpl.format(col1,col2,col3))

Вы можете сначала создать шаблон, а затем вставить столбцы.

Двойные фигурные скобки можно использовать, если вы хотите, чтобы буквально в скобках были выходные данные:

>>> "{{ {num} }}".format(num=10)
'{ 10 }'
1
AKS 12 Янв 2017 в 13:24

Пытаться:

(str(longest).join(['{:^','}|{:^','}|{:^','}']).format(col1,col2,col3))
1
Nick A 12 Янв 2017 в 13:16