Python:将列表打印为表

2024-09-27 09:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,遇到了一个问题。我有一个文本文件,我把它读入一个列表中,然后把它分成块或“团队”。子列表的数量是根据我想要的团队数量创建的。所有这些都完成了。但我想用一个很好的表格格式打印出来。我研究了以下问题thisthis和{a3},但它们不是我要找的。我甚至看过pypi模块PrettyTable和DataGrid。在

我的最终清单如下:

['name9', 'name2'], ['name4', 'name11'], ['name10', 'name3'], ['name7', 'name6'], ['name5', 'name8'], ['name']]

我是这样打印出来的:

^{pr2}$

结果是:

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       .

把它们对齐?在


Tags: name列表数量团队teamname2name3name11
3条回答

这使用字符串方法ljust()左对齐每个项目,而不是依赖多个制表符和自定义的print结尾(放在解释器中的if块中,这样您可以一次看到整个表):

>>> if 1:
...     print "".join(  ("Teams" + str(i+1)).ljust(10) for i in xrange(10))
...     print
...     for x in itertools.izip_longest(*l, fillvalue="."):
...             print "".join(str(i).ljust(10) for i in x)
...
Teams1    Teams2    Teams3    Teams4    Teams5    Teams6    Teams7    Teams8    Teams9    Teams10

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)

产生:

^{pr2}$

使用prettytable

from prettytable import PrettyTable

teams = ['team%d'%(x+1) for x in range(len(l)) ]
x = PrettyTable(teams)
for i in itertools.izip_longest(*l, fillvalue="."):
    x.add_row(i)
x.vertical_char = ' '
x.junction_char = '-'

print(x)

---------------------------------------------------
  team1   team2    team3    team4   team5   team6  
---------------------------------------------------
  name9   name4    name10   name7   name5    name  
  name2   name11   name3    name6   name8     .    
---------------------------------------------------

lines = x.get_string().split('\n')
output = '\n'.join(lines[1:-1])
print(output)

team1   team2    team3    team4   team5   team6  
---------------------------------------------------
name9   name4    name10   name7   name5    name  
name2   name11   name3    name6   name8     .  

相关问题 更多 >

    热门问题