listとarrayとNumPy配列の違い
・listの要素の型は何でも良い
・arrayはインポートが必要
・arrayは基本的に数値型を要素とする
・listとNumPy配列
listの要素の型は何でも良い
まず前提として、CやJAVAなどで「配列」と呼ばれているものがPythonで言うところの「array」に相当しており、
-
- 隣り合う要素がメモリ上で連続している
- 同じ型の変数しか保持できない
という特徴をもっている。Pythonでの「list」は要素がメモリ上で連続している保証は無いが、要素の型は基本的に何でも良いという点で使いやすい。特にプログラミング初学者にとっては、配列の型をいちいち気にしなくて良いのでコーディングがラクにできるというメリットがある。
list = [1, 3.14, 'python', [2, 4]] for i in list: print(i) # 1 # 3.14 # python # [2, 4]
一方で配列(array)の場合は、異なる型の要素を格納できない。
import array ary = array.array('i',[1, 3.14, 'python', [2, 4]]) # TypeError: integer argument expected, got float
上の例では、int型だと思って読み込んだのにfloat型が渡されたんだけど、と怒られる。因みに ‘i’ でint型の要素からなるarrayであると指定している。array型を宣言する際は第1引数に型の種類を与える必要がある。
arrayはインポートが必要
arrayはインポートが必要である点もlistとの大きな違いである。
import array ary = array.array('i', [1, 1, 2, 3, 5, 8]) for i in ary: print(i) # 1 # 1 # 2 # 3 # 5 # 8
arrayは基本的に数値型を要素とする
これはlistとの違いというよりもarray型の特徴だが、arrayには基本的に数値型の要素を格納する。文字列やリストを要素とすることはできない。
listとNumPy配列
Pythonの数値計算ライブラリである「NumPy」をインポートすればNumPy配列が利用できる。NumPy配列ではリスト型を要素とするため、当然リストと同様に異なる型の変数を格納することができる。
NumPy配列は数値計算に特化しており、listよりも簡単に行列計算を行うことができる。ary.T などとすれば容易に転置行列を得ることができる。
#多次元NumPy配列の例 import numpy as np ary = np.array([[[1, 2, 3], [10, 20, 30]], [[-1, -2, -3], [-10, -20, -30]]]) print(ary[0][1]) # [10 20 30] print(ary.T) # [[[ 1 -1] # [ 10 -10]] # # [[ 2 -2] # [ 20 -20]] # # [[ 3 -3] # [ 30 -30]]]
※ NumPy配列の演算処理が組み込みのリストに比べて高速である理由についてはこちらで解説している。