リストによる配列
配列は、組み込みデータ構造で作成できます。最適なのは list オブジェクトです。
単純な list は1 次元配列ですね。
v=[0.5, 0.75, 1.0, 1.5, 2.0]
list オブジェクトはどんなオブジェクトも要素にすることができます。他の list オブジェクトも要素にできます。入れ子 list オブジェクトにより 2 次元以上の配列も簡単に作成できます。
m = [v, v, v] m
#出力例 [[0.5, 0.75, 1.0, 1.5, 2.0], [0.5, 0.75, 1.0, 1.5, 2.0], [0.5, 0.75, 1.0, 1.5, 2.0]]
行は、二重インデックスの要素をインデックスで参照できます。
m[1]
#出力例 [0.5, 0.75, 1.0, 1.5, 2.0]
m[1][0]
#出力例 0.5
入れ子を使うとさらに複雑な構造も出来ます。
v1 = [0.5, 1.5] v2 = [1, 2] m = [v1, v2] c = [m, m] c
#出力例 [[[0.5, 1.5], [1, 2]], [[0.5, 1.5], [1, 2]]]
c[1][1][0]
このようなオブジェクトの構成は一般に、元のオブジェクトへの参照によります。
v = [0.5, 0.75, 1.0, 1.5, 2.0] m = [v, v, v] m
#出力例 [[0.5, 0.75, 1.0, 1.5, 2.0], [0.5, 0.75, 1.0, 1.5, 2.0], [0.5, 0.75, 1.0, 1.5, 2.0]]
v の第一要素の値を変えると m に何が起こるのでしょうか。
v[0] = 'Python' m
#出力例 [['Python', 0.75, 1.0, 1.5, 2.0], ['Python', 0.75, 1.0, 1.5, 2.0], ['Python', 0.75, 1.0, 1.5, 2.0]]
Python の配列クラス
Python には専用の array モジュールがあります。次のコードは list オブジェクトから array オブジェクトをインスタンス化します。
v = [0.5, 0.75, 1.0, 1.5, 2.0] import array a = array.array('f', v) a
#出力例 array('f', [0.5, 0.75, 1.0, 1.5, 2.0])
a.append(0.5)
a
#出力例 array('f', [0.5, 0.75, 1.0, 1.5, 2.0, 0.5])
a.extend([5.0, 6.75]) a
#出力例 array('f', [0.5, 0.75, 1.0, 1.5, 2.0, 0.5, 5.0, 6.75])
2 * a
#出力例 array('f', [0.5, 0.75, 1.0, 1.5, 2.0, 0.5, 5.0, 6.75, 0.5, 0.75, 1.0, 1.5, 2.0, 0.5, 5.0, 6.75])
array クラスには、組み込みのファイルへの格納、検索機能を持っているという利点があります。
f = open ('array.apy', 'wb') a.tofile(f) f.close() with open('array.apy', 'wb') as f: a.tofile(f) !ls -n arr* -rw-r--r-- 1 502 20 32 4 9 20:10 array.apy
ディスクからデータを読み込む場合であっても、array オブジェクトのデータ型が重要です。
b = array.array('f') with open('array.apy', 'rb') as f: b.fromfile(f, 5) b
#出力例 array('f', [0.5, 0.75, 1.0, 1.5, 2.0])
b = array.array('d') with open('array.apy', 'rb') as f: b.fromfile(f,2) b
#出力例 array('d', [0.0004882813645963324, 0.12500002956949174])