Skip to main content
 首页 » 编程设计

python : Print list of list as tables

2025年05月04日13JustinYoung

我是 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      .