こんにちは。現役Webエンジニアの三年坊主です。
今回は、Pythonで2次元配列を使いたい人の、このような疑問に答えます。
この記事では、大学の研究と自分の趣味で、合わせて5年以上Pythonを使ってきた経験を生かして、Pythonで2次元配列を使う方法を紹介します。
この記事の内容
- Pythonにおけるリスト(list)・配列(array)・numpy.ndarrayの比較
- Pythonで2次元配列を定義・操作する【コピペ用】
Pythonにおけるリスト(list)・配列(array)・numpy.ndarrayの比較
1つの値だけでなく、複数の値を並べて一つにまとめて格納するデータ型を「配列」と呼びます。
数字などの値を、縦と横の2次元に並べた「2次元配列」をPythonで操作する方法を説明します。
Pythonではこのような「配列」を作ることができるデータ構造がいくつかあります。簡単に比較した後に、次の見出しで実際に動かせるコードの例を紹介します。
リスト(list)
整数型(int)であっても浮動小数点型(float)であっても、まとめて一つのリストに含めることができます。
リストの中にリストを入れることができるので、あとでその機能を使って2次元配列を作ります。
1 2 3 4 5 6 7 8 | list_1 = [0, 1, 2, 3] print(list_1) list_2 = [0.3, 'aa', [24, 4.0, 'test']] print(list_2) # コンストラクタを使って作成することもできる print(list((1, 2, 3))) |
1 2 3 | [0, 1, 2, 3] [0.3, 'aa', [24, 4.0, 'test']] [1, 2, 3] |
配列(array)
arrayの場合は、最初に指定した型しか要素に含めることができません(たとえば ‘i’ を指定したら、そのarrayには整数型の要素しか入れられない)。指定した以外の型を含めるとエラーが発生します。
リストを要素として含めることもできないので、arrayを使って2次元配列を作ることはできません。
1 2 3 4 5 6 7 8 9 | import array array_int = array.array('i', [0, 1, 2, 3]) print(array_int) array_float = array.array('f', [0.0, 1.1, 2.2, 3.3]) print(array_float) array_mix_int = array.array('i', [0.3, 'aa', [24, 4.0, 'test']]) print(array_mix_int) |
1 2 3 4 5 6 7 8 9 10 11 | array('i', [0, 1, 2, 3]) array('f', [0.0, 1.100000023841858, 2.200000047683716, 3.299999952316284]) TypeErrorTraceback (most recent call last) <ipython-input-11-9a3352290be5> in <module>() 6 print(array_float) 7 ----> 8 array_mix = array.array('i', [0.3, 'aa', [24, 4.0, 'test']]) 9 print(array_mix) TypeError: integer argument expected, got float |
numpy.ndarray
参考:The N-dimensional array (ndarray)
np.arrayのコンストラクタに、Pythonのデータ型(リストなど)を与えて、新しいndarrayを作成します。
当然ですがnumpyモジュールのインポートが必要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import numpy as np ndarray_1 = np.array([1, 2, 3], np.int32) print(ndarray_1) print(type(ndarray_1)) print(ndarray_1.shape) print(ndarray_1.dtype) # np.float32を指定したので、ndarray_2では要素が浮動小数点型になっている ndarray_2 = np.array([1, 2, 3], np.float32) print(ndarray_2) print(type(ndarray_2)) print(ndarray_2.shape) print(ndarray_2.dtype) |
1 2 3 4 5 6 7 8 | [1 2 3] <type 'numpy.ndarray'> (3,) int32 [1. 2. 3.] <type 'numpy.ndarray'> (3,) float32 |
Pythonでは「リスト」と「配列」という言葉をあまり厳密に区別しないので混乱してしまいがちですが、「Pythonで2次元配列」と言ったときに使うのは、リストやnumpy.ndarrayを使ったデータのことです。
リスト(list) | 配列(array) | numpy.ndarray | |
---|---|---|---|
タイプ | 組み込み型 | 標準ライブラリ(要インポート) | NumPy(要インポート) |
要素の型 | 異なる型の要素を格納できる | 全て同じ型の要素(文字、整数、浮動小数点型…) | 全て同じ型の要素(文字、整数、浮動小数点型…) |
形の変更 | 動的に変更できる | 動的に変更できる | 形を変えるには新しく作り直す必要あり |
配列(array)を使って2次元の配列を作ることはできないので、次の見出しでは、「2次元配列」としてリスト(list)とnumpy.ndarrayを見ていきます。
Pythonで2次元配列を定義・操作する【コピペ用】
定義・要素の読み出し【リスト(list)】
同じ要素を繰り返しリストに入れるときに使います。この場合はlist_2のように内包表記を使うのがオススメです。
1 2 3 4 5 6 7 8 9 10 | # list_1はあまりオススメしない list_1 = [[0]*3]*2 list_2 = [[0 for i in range(3)] for j in range(2)] print(list_1) print(list_2) # 要素の読み出し print(list_1[0][1]) print(list_2[1][2]) |
1 2 3 4 | [[0, 0, 0], [0, 0, 0]] [[0, 0, 0], [0, 0, 0]] 0 0 |
要素ごとに直接値を指定して作成することもできます。
1 2 3 4 5 | list_3 = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] print(list_3) # 要素の読み出し print(list_3[0][3]) |
1 2 | [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] 3 |

要素の変更・追加・削除【リスト(list)】
要素を指定できれば、あとは1次元の配列と変わらず、要素の変更・追加・削除ができます。
1 2 3 4 5 6 7 8 9 10 11 | # 変更 list_3[1][4] = 99 print(list_3) # 追加 list_3[0].append(100) print(list_3) # 削除 (clear, pop, remove, del ...) del list_3[1][2] print(list_3) |
1 2 3 | [[0, 1, 2, 3, 4], [5, 6, 7, 8, 99]] [[0, 1, 2, 3, 4, 100], [5, 6, 7, 8, 99]] [[0, 1, 2, 3, 4, 100], [5, 6, 8, 99]] |



定義・要素の読み出し【numpy.ndarray】
1 2 3 4 5 6 7 | import numpy as np ndarray_2 = np.array([[0, 1, 2], [3, 4, 5]], np.int32) print(ndarray_2) # 要素の読み出し print(ndarray_2[0][2]) |
1 2 3 | [[0 1 2] [3 4 5]] 2 |
要素の変更・追加・削除【numpy.ndarray】
1 2 3 4 5 6 7 | # 変更 ndarray_2[0][1] = 11 print(ndarray_2) # 追加はできません # 削除もできません |
1 2 | [[ 0 11 2] [ 3 4 5]] |
Pythonで2次元配列を使いこなして、快適なエンジニア生活を送りましょう。