/ / Formatowanie ciągu na podstawie maksymalnej długości - python, python-3.x

Ciąg formatujący oparty na maksymalnej długości - python, python-3.x

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))

jak mogę użyć longest w miejsce 20 aby moje formatowanie zawsze pasowało? Nie chcę też, aby mój kod wyglądał brzydko, więc jeśli to możliwe, użyj formatowania lub w inny sposób.

Odpowiedzi:

4 dla odpowiedzi № 1

Możesz przekazać szerokość bezpośrednio w formacie:

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

(na podstawie przykładu cytowanego w dokumentacja)

i nie musisz ręcznie rozpakowywać kolumn. Po prostu rozpakuj je za pomocą * w format połączenie.


3 dla odpowiedzi № 2

Formaty można zagnieżdżać:

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))

1 dla odpowiedzi nr 3

Próbować:

(str(longest).join(["{:^","}|{:^","}|{:^","}"]).format(col1,col2,col3))

1 dla odpowiedzi nr 4
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))

Możesz najpierw utworzyć szablon, a następnie wstawić kolumny.

Można użyć podwójnych nawiasów klamrowych, jeśli chcesz dosłownie mieć nawiasy klamrowe na wyjściu:

>>> "{{ {num} }}".format(num=10)
"{ 10 }"