schedule2018-01-28

【Python3】2次元配列をうまいこと表示する

Pythonの2次元配列をprint()で表示するコツを紹介します。 numpyを使わなくてもできます。

動作確認:Python 3.6

ランダムな値の2次元配列の宣言

表示するランダムな2次元配列を用意します。 内包表記で2次元配列を宣言して、random.randint()で指定範囲のランダムな整数を用意しました。

出力は# => 出力、複数行の場合は"""\n出力\n"""として表現しています。

import random

h = 10
w = 3
arr = [[random.randint(0, 10)] * w for _ in range(h)]

print(arr)
# => [[6, 10, 6], [3, 4, 9], [5, 7, 4], [9, 2, 3], [6, 3, 6], [9, 6, 9], [0, 6, 9], [7, 4, 4], [2, 1, 10], [8, 9, 3]]

そのままだと1行で出力されるため見づらいですね。

*でアンパッキングする

*(アスタリスク)を添えると配列をアンパックできます。 どういうことかというと、下のように要素を分解してくれます。

print(arr[0], arr[1], arr[2], arr[3], ....)

# 上と同じで要素を分解する
print(*arr)

for文など使うよりもスッキリしますね。 アンパッキングすると要素の間の文字列(separator)を指定できるのでこれを利用します。 改行をseparatorに指定。

# 改行して2次元配列を表示
print(*arr, sep='\n')

""""
[6, 10, 6]
[3, 4, 9]
[5, 7, 4]
[9, 2, 3]
[6, 3, 6]
[9, 6, 9]
[0, 6, 9]
[7, 4, 4]
[2, 1, 10]
[8, 9, 3]
""""

かっこやセミコロンをなくす

要素だけ表示するにはこのように書きます。

for a in arr:
    print(*a)
"""
6 10 6
3 4 9
5 7 4
9 2 3
6 3 6
9 6 9
0 6 9
7 4 4
2 1 10
8 9 3
"""

カンマ区切りのcsvにする

for a in arr:
    print(*a, sep=',')
"""
6,10,6
3,4,9
5,7,4
9,2,3
6,3,6
9,6,9
0,6,9
7,4,4
2,1,10
8,9,3
"""

こちらもどうぞ