2011-10-31 21 views
1

我正在做一些格式化的表格打印,我想知道我該如何做這樣的事情,我認爲這是一個lambda的情況,但我以前從未使用過,所以我不確定:)Python字符串格式化 - 可能使用lambda?

print "{:^{}}|"*(self.size).format(for i in range(self.size),6) 
# self size is assumed to be 5 in this example, doesn't work, something along this line is needed though 

基本上,這樣做(下面),但在一個更清潔的方式。 PS。我知道下面的例子不工作,但你讓我的漂移

print "{:^{}}" * 5 .format(humangrid[0][0],4,humangrid[0][1],4,humangrid[0][2],4,humangrid[0][3],4,humangrid[0][4],4, 

謝謝!

+0

如果您可以共享一些示例數據和預期輸出,將會很有用。 –

回答

2

這是我最好的猜測:

print '|'.join('{:^6}'.format(i) for i in range(self.size)) 
... 
print ''.join('{:^4}'.format(i) for i in humangrid[0]) 

如果你真的想用一個單一的調用來完成它string.format()

print '|'.join(['{:^6}'*self.size]).format(*range(self.size)) 
... 
print ('{:^4}'*len(humangrid[0])).format(*humangrid[0]) 
+0

謝謝,得到它的工作:) – Trent

1

假設你想普林名在2D列表居中表格的方式,下面是做這件事:

humangrid = [ 
    ["john", "jacob", "jezebel"], 
    ["mary", "maria", "mel"], 
    ["shareen", "sean", "shiva"], 
] 

cell_width = max(len(y) for x in humangrid for y in x) # get length of longest name 
cell_width += 2 # optional padding 

for row in humangrid: 
    print "|".join(name.center(cell_width) for name in row) 

運行會給你:

john | jacob | jezebel 
    mary | maria | mel 
shareen | sean | shiva 

要改變表中的取向,只需用ljust()rjust()或替換center()

一個可以很容易地取代使用.format(),但我覺得這種方法更具可讀性。

0

這應該做你的意思

print(("{:4}|"*len(humangrid[0])).format(*humangrid[0])) 

的想法是隻使用format(*xxx)調用格式的參數個數可變。