2014-02-16 54 views
0

给定下表。我将如何使用variable.center(),variable.rjust(),variable.ljust(),%f和任何其他描述符把它变成一个表中的python从给定列表创建ASCII表 - Python

Name   Age  Height Pay Rate Grade 
----------- ---------- ---------- ---------- ---------- 
John    15.00  1.20  10.00  8.00 
Robert   45.00  6.70  24.00  14.00 
Duncan   10.00  5.40  5.00  10.00 
Steven   30.00  6.50  30.00  16.00 

我想创建上表使用python,我将如何去格式化上面的表格

+0

你的名单是怎样的? – spiehr

+0

在继续之前,我会建议您使用字典而不是列表。当你开始填充表格时,可读性更强,更容易混淆。 '人'['John'] ['Height']'比'people [0] [1]'更透明。然后,“对于人:对attribs中的attrib:print(人[person] [attrib])'加上任何格式化。 – OJFord

回答

1

有人指出你的问题可能是重复的,但有问题的答案看起来有点旧......自从引入新的字符串格式mini语言,你可以单独使用str.format来做这种事情。

假设您的列表看起来像:

data = [ 
    ["John" , 15.00, 1.20, 10.00, 8.00], 
    ["Robert", 45.00, 6.70, 24.00, 14.00], 
    ["Duncan", 10.00, 5.40, 5.00, 10.00], 
    ["Steven", 30.00, 6.50, 30.00, 16.00], 
] 

您可以使用格式方法:

# Headers, centered 
print("{: ^15s} {: ^15s} {: ^15s} {: ^15s} {: ^15s}".format(
    "Name", "Age", "Height", "Pay Rate", "Grade") 
) 

# Dashes (not very readable, but I'm lazy) 
print(" ".join([("-" * 15)] * 5)) 

# Lines 
for line in data: 
    print("{:15s} {: 15.2f} {: 15.2f} {: 15.2f} {: 15.2f}".format(*line)) 

的格式规范(见format specification mini-language):

format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type] 
fill  ::= <any character> 
align  ::= "<" | ">" | "=" | "^" 
sign  ::= "+" | "-" | " " 
width  ::= integer 
precision ::= integer 
type  ::= (pretty much like printf) 

^手段居中。

结果应该是这样的:

 Name    Age   Height   Pay Rate   Grade  
--------------- --------------- --------------- --------------- --------------- 
John      15.00   1.20   10.00   8.00 
Robert     45.00   6.70   24.00   14.00 
Duncan     10.00   5.40   5.00   10.00 
Steven     30.00   6.50   30.00   16.00 

使这一短多可重复使用的留作练习。

+0

*“但其他问题很老”* - 我连接的第一个是从去年10月;那根本不老。我的答案也使用了新的字符串格式化程序。这些答案在这些问题中的好处是你不需要自己指定格式。你只需传入数据。 – poke

+0

@poke:足够公平,甚至提高你的答案。 –

+0

哈哈,谢谢; D返回的好处,因为你的回答很简单,OP的特殊情况:) – poke