2014-02-16 61 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