我是 python 新手,遇到了一个问题。我有一个文本文件,我将其读入列表,然后将其分成 block 或“团队”。子列表的数量是根据我想要的团队数量创建的。这一切都完成了。但我想以漂亮的表格格式打印出来。我调查了以下问题 this , this和 this ,但它们不是我要找的。我什至看过 pypi 模块 PrettyTable 和 DataGrid。
我的最终列表如下所示:
['name9', 'name2'], ['name4', 'name11'], ['name10', 'name3'], ['name7', 'name6'], ['name5', 'name8'], ['name']]
我打印出来是这样的:
for i in range(len(l)):
print "Teams{}\t\t ".format(i+1),
print
for x in itertools.izip_longest(*l, fillvalue="."):
print "\n"
t = "\t\t ".join(str(i) for i in x)
print t
结果是:
Teams1 Teams2 Teams3 Teams4 Teams5 Teams6
name9 name4 name10 name7 name5 name
name2 name11 name3 name6 name8 .
有什么方法可以得到这样的输出:
Team 1 Team 2 Team 3 Team 4 Team 5 Team 6
-------------------------------------------------------------------
name9 name4 name10 name7 name5 name
name2 name11 name3 name6 name8 .
然后正确对齐它们?
最佳答案
或者,如果您不想使用第三方库:
from itertools import izip_longest
data = [['name9', 'name2'], ['name4', 'name11'], ['name10', 'name3'], ['name7', 'name6'], ['name5', 'name8'], ['name']]
length = max(len(name) for names in data for name in names)
gutter = 5
format_string = '{{:<{}}}'.format(length + gutter)
print ''.join(format_string.format('Team {}'.format(x)) for x in range(len(data)))
print '-' * len(data) * (length + gutter)
for names in izip_longest(*data, fillvalue='.'):
print ''.join(format_string.format(name) for name in names)
产生:
Team 0 Team 1 Team 2 Team 3 Team 4 Team 5
------------------------------------------------------------------
name9 name4 name10 name7 name5 name
name2 name11 name3 name6 name8 .
关于 python : Print list of list as tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995612/