2012-01-05 7 views
2

私はいくつかの行のデータを印刷してそれをうまく処理しなければなりません。私はC + +のstd :: coutのパラメータを変更することでそれを行うことができますが、私はどのように私はそれをPythonで行うことができないのか理解できません。Pythonのきれいな行列の印刷

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

それは巧妙なアイデアは1つのリストに入れて、その後、各シンボルをカウントするだろうと思わ:

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

は、私はこのようなテキストを印刷したい:例えば、私は、この持っています文字列を入力してスペースを追加してください。もっと賢い方法があれば教えてください。

主な問題は、デフォルトのPythonのモジュールのみを使用できることです。それを行う可能性はありますか?どうもありがとう!

答えて

9

ETA:私の元の回答では、タブの代わりにパディングスペースを使用して、各列の幅を一定にしたいと願っていませんでした。また、最長のデータと次の列の間に正確に2つのスペースが必要なように見えます。その場合には、それは次のように行うことができます(文字列は内蔵の、デフォルトのPythonモジュールがあることに注意してください):テキストのな長さは、タブの間隔よりも高い場合

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

+0

ああ!できたね ! upvoted !! – joaquin

関連する問題