Python 基于最大长度设置字符串格式

Python 基于最大长度设置字符串格式,python,python-3.x,Python,Python 3.x,如何使用longest来代替20,以便始终适合我的格式?我也不希望我的代码看起来难看,因此如果可能,请使用格式或其他方式。尝试: 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 = len(m

如何使用
longest
来代替
20
,以便始终适合我的格式?我也不希望我的代码看起来难看,因此如果可能,请使用格式或其他方式。

尝试:

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 = 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 }'
(改编自本手册中引用的示例)

而且您不必手动解压缩列。只需在
格式
调用中使用
*
解包即可。

格式可以嵌套:

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

正是我想要的!请注意,我在几分钟前回答了这个问题。您的答案没有被选中,因为不需要三个花括号来完成这个任务。当然不需要!我没有阅读文档,只是照着这个做了。公认答案中的方法是最好的,也有记录在案。@Jean-Françoisfare:看起来你的答案现在被接受了。可能是OP之前没有看到它,因为有太多的答案。而且,我对已接受答案的评论仍然有效;-)我喜欢这个答案,它很有创意,但不是我想要的。
for cols in zip(l[::3],l[1::3],l[2::3]):
    print('{:^{width}}|{:^{width}}|{:^{width}}'.format(*cols,width=longest))
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))