1. ホーム
  2. python

[解決済み] プリティプリント2Dリスト?

2023-06-09 23:01:53

質問

Pythonの2Dリストを2D行列として表示する簡単でビルトインな方法はありますか?

だから、これです。

[["A", "B"], ["C", "D"]]

は次のようになります。

A    B
C    D

を見つけたので pprint モジュールを見つけましたが、それは私が欲しいものをするように見えません。

どのように解決するのですか?

面白くするために、もっと大きな行列でやってみましょう。

matrix = [
   ["Ah!",  "We do have some Camembert", "sir"],
   ["It's a bit", "runny", "sir"],
   ["Well,",  "as a matter of fact it's", "very runny, sir"],
   ["I think it's runnier",  "than you",  "like it, sir"]
]

s = [[str(e) for e in row] for row in matrix]
lens = [max(map(len, col)) for col in zip(*s)]
fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
table = [fmt.format(*row) for row in s]
print '\n'.join(table)

出力します。

Ah!                     We do have some Camembert   sir            
It's a bit              runny                       sir            
Well,                   as a matter of fact it's    very runny, sir
I think it's runnier    than you                    like it, sir  

UPD: 複数行のセルについては、このようなものが動作するはずです。

text = [
    ["Ah!",  "We do have\nsome Camembert", "sir"],
    ["It's a bit", "runny", "sir"],
    ["Well,",  "as a matter\nof fact it's", "very runny,\nsir"],
    ["I think it's\nrunnier",  "than you",  "like it,\nsir"]
]

from itertools import chain, izip_longest

matrix = chain.from_iterable(
    izip_longest(
        *(x.splitlines() for x in y), 
        fillvalue='') 
    for y in text)

そして、上記のコードを適用します。

参照 http://pypi.python.org/pypi/texttable