(1)配列の設定とサイズの取得
リストは一次元だけでなく、多次元でも作れます。
試しに以下の配列を作った時の配列サイズを確認します。
#多次元配列
a = [1,2,3]
b = [[1,2],[3,4],[5,6]]
c = [[1,2,3],[4,5,6]]
#配列サイズ
print(len(a))
print(len(b))
print(len(c))
print(len(b[0]))
print(len(c[0]))
3 #print(len(a))の結果 → aの一次要素数([]の要素数)
3 #print(len(b))の結果 → bの一次要素数([[],[],[]]の[]が要素の単位)
2 #print(len(c))の結果 → bの一次要素数([[],[]]の[]が要素の単位)
2 #print(len(b)[0])の結果 → [1,2] / [3,4] / [5,6]の要素数
3 #print(len(c)[0])の結果 → [1,2,3] / [4,5,6]の要素数
ちなみに、Pythonでは配列サイズを最初に宣言することはできません
(VisualBasicのRedimのようなものはありません)。
配列の大きさを最初に指定したい場合は、例えば0を要素とするような配列を作って、あとで要素を書き換える、という操作が必要になります。
例えば3×10のサイズの配列を準備する場合は次のようにします。
a = []
for cnt1 in range(3):
a.append([0])
for cnt2 in range(10):
a[cnt1].append(0)
print(a))
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
(2)配列要素の取得
要素の抽出は次のようにして行います。
#多次元配列
a = [1,2,3] #一次配列
b = [[1,2],[3,4],[5,6]] #二次配列
c = [[1,2,3],[4,5,6]] #二次配列
d = [[[1],[2],[3]],[[4],[5],[6]]] #三次配列
#要素抽出
print(a[0]) #一次第一成分
print(b[1]) #一次第二成分
print(c[1]) #一次第二成分
print(d[0]) #一次第一成分
print(b[0][1]) #一次第一成分 / 二次第二成分
print(c[1][2]) #一次第二成分 / 二次第三成分
print(d[1][2]) #一次第二成分 / 二次第三成分
print(d[1][2][0]) #一次第二成分 / 二次第三成分 / 三次第一成分
1 #print(a[0])の結果
[3, 4] #print(b[1])の結果
[4, 5, 6] #print(c[1])の結果
[[1], [2], [3]] #print(d[0])の結果
2 #print(b[0][1])の結果
6 #print(c[1][2])の結果
[6] #print(d[1][2])の結果
6 #print(d[1][2][0])の結果
(3)配列要素の書き換え
要素の書き換えは次のようにして行います。
#多次元配列
e = [[1,2,3,4,5],[6,7,8,9,10]]
e[0][0]=100 #1 → 100に書き換え
e[1][3]=900 #9 → 900に書き換え
print(e)
[[100,2,3,4,5],[6,7,8,900,10]]
また、数値を配列(リスト)や文字列にも書き換えられます。
#多次元配列
e = [[1,2,3,4,5],[6,7,8,9,10]]
e[0][0]='moji' #1 → 'moji'に書き換え
e[1][3]=[9,9,9] #9 → [9,9,9]に書き換え
print(e)
[['moji', 2, 3, 4, 5], [6, 7, 8, [9, 9, 9], 10]]
(4)配列構造の取り方例
文字列と数値を同時にリスト内に入れ込むこともできます。
#配列
dx = []
dxstr = 'x'
dxnum = []
for cnt1 in range(0,6):
dxnum.append(cnt1)
dx.append(dxstr)
dx.append(dxnum)
print(dxstr)
print(dxnum)
print(dx)
x #print(dxstr)の結果
[0, 1, 2, 3, 4, 5] #print(dxnum)の結果
['x', [0, 1, 2, 3, 4, 5]] #print(dx)の結果
例えば、上記配列dxを横軸とするようなデータがあった場合、縦軸データを次のようにして追加してみます
(配列が大きくて見難いので、“\”を入れて改行しています)。
#多次元配列
dx = ['x', [0, 1, 2, 3, 4, 5]]
d = [ \
dx, \
['y1',[0.25, 0.01, 0.03, 0.04, 0.10]], \
['y2',[0.3, 0.11, 0.13, 0.24, 0.05]], \
['y3',[0.25, 0.21, 0.13, 0.04, 0.10]], \
['z',[10, 20.5]]
]
#データ全体
print(d)
#xデータ
print(d[0])
print(d[0][0])
print(d[0][1])
#y2データ
print(d[2])
print(d[2][0])
print(d[2][1])
#zデータ
print(d[4])
print(d[4][0])
print(d[4][1])
#データ全体
[['x', [0, 1, 2, 3, 4, 5]], ['y1', [0.25, 0.01, 0.03, 0.04, 0.1]], ['y2', [0.3, 0.11, 0.13, 0.24, 0.05]], ['y3', [0.25, 0.21, 0.13, 0.04, 0.1]], ['z', [10, 20.5]]]
#xデータ
['x', [0, 1, 2, 3, 4, 5]] #print(d[0])の結果
x #print(d[0][0])の結果
[0, 1, 2, 3, 4, 5] #print(d[0][1])の結果
#y2データ
['y2', [0.3, 0.11, 0.13, 0.24, 0.05]]
y2
[0.3, 0.11, 0.13, 0.24, 0.05]
#zデータ
['z', [10, 20.5]]
z
[10, 20.5]
上記例はよくある横軸x、縦軸yとするデータをまとめたものです。
リスト構造を上手くとることでデータ用の変数を増やさず、配列内からデータを簡単に抽出することが可能になります。
例えば、'y2'のデータのみ抽出する場合は、次のようにしています。
for cnt1 in range(len(d)):
if d[cnt1][0] == 'y2':
y2 = d[cnt1][1]
break
print(y2)
[0.3, 0.11, 0.13, 0.24, 0.05]