83

2D Pythonリストを2Dマトリックスとして印刷する簡単な組み込みの方法はありますか?

したがって、この:

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

のようなものになります

A    B
C    D

モジュールを見つけましたpprintが、希望どおりに動作しないようです。

4

10 に答える 10

90

物事を面白くするために、より大きなマトリックスで試してみましょう。

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も参照してください

于 2012-11-04T00:36:01.240 に答える
50

Pandas(Pythonデータ分析ライブラリ)を使用できる場合は、2DマトリックスをDataFrameオブジェクトに変換することできれいに印刷できます。

from pandas import *
x = [["A", "B"], ["C", "D"]]
print DataFrame(x)

   0  1
0  A  B
1  C  D
于 2015-08-22T18:36:11.693 に答える
40

サードパーティのライブラリがない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
于 2018-05-09T16:06:03.893 に答える
36

いつでもnumpyを使用できます:

import numpy as np
A = [['A', 'B'], ['C', 'D']]
print(np.matrix(A))

出力:

[['A' 'B']
 ['C' 'D']]
于 2016-04-11T01:48:14.423 に答える
8

に代わる簡単な方法を提供するためだけに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ます。

于 2019-12-01T08:48:07.977 に答える
6

モジュール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/を参照してください

于 2015-08-22T20:47:23.277 に答える
1

Notebook / IPython環境を使用している場合、sympyはIPython.displayを使用して心地よいマトリックスを印刷できます。

import numpy as np
from sympy import Matrix, init_printing
init_printing()

print(np.random.random((3,3)))
display(np.random.random((3,3)))
display(Matrix(np.random.random((3,3))))

ここに画像の説明を入力してください

于 2020-09-10T17:02:54.397 に答える
1

また、オプションでヘッダーを印刷できる表形式をお勧めします。

from tabulate import tabulate

lst = [['London', 20],['Paris', 30]]
print(tabulate(lst, headers=['City', 'Temperature']))

City      Temperature
------  -------------
London             20
Paris              30
于 2020-12-10T22:04:58.040 に答える
0

を更新して、内側printend=' 'ループに「\ n」の代わりにスペースを出力し、外側のループに。を含めることができますprint()

a=[["a","b"],["c","d"]]
for i in a:
  for j in i:
    print(j, end=' ')
  print()

私はここからこの解決策を見つけました。

于 2018-12-23T06:57:50.913 に答える
-2

次のコードを参照してください。

# 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]
于 2018-01-13T14:30:43.260 に答える