2D Pythonリストを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)
次に、上記のコードを適用します。
Pandas(Pythonデータ分析ライブラリ)を使用できる場合は、2DマトリックスをDataFrameオブジェクトに変換することできれいに印刷できます。
from pandas import *
x = [["A", "B"], ["C", "D"]]
print DataFrame(x)
0 1
0 A B
1 C D
サードパーティのライブラリがないPython3の場合:
matrix = [["A", "B"], ["C", "D"]]
print('\n'.join(['\t'.join([str(cell) for cell in row]) for row in matrix]))
出力
A B
C D
いつでもnumpyを使用できます:
import numpy as np
A = [['A', 'B'], ['C', 'D']]
print(np.matrix(A))
出力:
[['A' 'B']
['C' 'D']]
に代わる簡単な方法を提供するためだけにprint('\n'.join(\['\t'.join(\[str(cell) for cell in row\]) for row in matrix\]))
:
matrix = [["A", "B"], ["C", "D"]]
for row in matrix:
print(*row)
説明
*row
は解凍row
されます。たとえば、がのprint("A", "B")
場合に呼び出されます。row
["A", "B"]
注
両方の回答は、各列の幅が同じである場合にのみ適切にフォーマットされます。区切り文字を変更するには、sep
キーワードを使用します。例えば、
for row in matrix:
print(*row, sep=', ')
印刷します
A, B
C, D
代わりは。
forループのないワンライナー
print(*(' '.join(row) for row in matrix), sep='\n')
' '.join(row) for row in matrix)
すべての行の文字列を返します。たとえば、がのA B
場合row
です["A", "B"]
。
*(' '.join(row) for row in matrix), sep='\n')
シーケンスを返すジェネレータをアンパックする'A B', 'C D'
ので、与えられprint('A B', 'C D', sep='\n')
た例で呼び出されmatrix
ます。
モジュールpandas
を使用するよりも軽量なアプローチprettytable
from prettytable import PrettyTable
x = [["A", "B"], ["C", "D"]]
p = PrettyTable()
for row in x:
p.add_row(row)
print p.get_string(header=False, border=False)
収量:
A B
C D
prettytable
さまざまな方法で出力をフォーマットするための多くのオプションがあります。
詳細については、 https://code.google.com/p/prettytable/を参照してください
また、オプションでヘッダーを印刷できる表形式をお勧めします。
from tabulate import tabulate
lst = [['London', 20],['Paris', 30]]
print(tabulate(lst, headers=['City', 'Temperature']))
:
City Temperature
------ -------------
London 20
Paris 30
を更新して、内側print
のend=' '
ループに「\ n」の代わりにスペースを出力し、外側のループに。を含めることができますprint()
。
a=[["a","b"],["c","d"]]
for i in a:
for j in i:
print(j, end=' ')
print()
私はここからこの解決策を見つけました。
次のコードを参照してください。
# Define an empty list (intended to be used as a matrix)
matrix = []
matrix.append([1, 2, 3, 4])
matrix.append([4, 6, 7, 8])
print matrix
# Now just print out the two rows separately
print matrix[0]
print matrix[1]