2012-01-05 121 views
2

我必須打印幾行數據,並做得很好。我可以用C++改變std :: cout的參數來實現,但我無法理解我如何用Python做到這一點。例如,我有這樣的:Python的漂亮的矩陣打印

row1 = [1, 'arc1.tgz', 'First', '15.02.1992'] 
row2 = [16, 'arc2modified.tgz', 'Second', 'today'] 
row3 = ['112', 'arc89.tgz', 'Corrupted', 'unknown'] 

我想打印的文字是這樣的:

1 arc1.tgz   First  15.02.1992 
16 arc2modified.tgz Second  today 
112 arc89.tgz   Corrupted unknown 

看來,這將是一個聰明的想法把它放在一個列表中,然後計算每個符號字符串,然後添加空格,但我想知道是否有更聰明的方法來做到這一點。

主要問題是我只能使用默認的Python模塊。有沒有可能做到這一點?非常感謝!

回答

9
my_matrix = [row1, row2, row3] 
print "\n".join(["\t".join(map(str, r)) for r in my_matrix]) 

ETA:我原來的答案錯過了,你希望每列都是固定寬度,使用填充空格(而不是製表符)。它也看起來像你想在最長的基準和下一列之間準確的兩個空格。在這種情況下,它可以做如下(注意:是內置的,默認的Python模塊):當文本的lenght比標籤間距更高

import string 

max_lens = [max([len(str(r[i])) for r in my_matrix]) 
       for i in range(len(my_matrix[0]))] 

print "\n".join(["".join([string.ljust(str(e), l + 2) 
       for e, l in zip(r, max_lens)]) for r in my_matrix]) 
+1

出現問題。然後,行相對於其他行被抵消。一個解決方案是首先在每列獲得最大長度,然後相應地打印 – joaquin 2012-01-05 18:31:47

+0

啊!你做到了 ! upvoted! – joaquin 2012-01-05 18:33:04