1.Python配列(リスト)

Pythonではデータの配列構造をリストと呼ばれるシーケンスを用いて行います。 実際、リストはほとんど配列と同じようなものなので、特別身構える必要はありません。

1.1.一次配列

  1. 配列の設定
  2. 配列の要素取得
  3. 配列サイズの取得
  4. 配列要素の書き換え

(1)配列の設定

“[1,2,3]”のリスト(一次配列)を作成する方法として、次の三通りが挙げられます。
#リストとして入力(その1)
a = [1,2,3]

#リストとして入力(その2)
b = []		#変数bをリストとして宣言(空リストの作成)
b.append(1)	#appendはリストに要素を後ろから追加
b.append(2)
b.append(3)

#リストとして入力(その3)
#	その2をfor文で書いたもの
c = []
for cnt1 in range(1,4):
	c.append(cnt1)

#リスト確認
print(a)
print(b)
print(c)
実行結果はすべて同じで、以下の通りです。
[1,2,3]	#print(a)
[1,2,3]	#print(b)
[1,2,3]	#print(c)

節はじめに戻る


(2)配列の要素取得

リストの要素を抽出する場合、リストのインデックスが“0”から始まることに注意して
#リストの設定
a = [2,4,6,8,10]

#要素抽出
print(a[0])		#1番目の要素抽出(2)
print(a[1])		#2番目の要素抽出(4)
print(a[:3])		#最初~3番目の要素抽出([2,4,6])
print(a[2:])		#3番目~最後までの要素抽出([6,8,10])
print(a[2:4])	#3~4番目の要素抽出([6,8])
print(a[-2:])	#最初~3番目の要素抽出([2,4,6])
print(a[:-3])	#最初~3番目の要素抽出([2,4,6])
を実行し、次の結果が得られます。
2		#print(a[0])の結果
4		#print(a[1])の結果
[2,4,6]	#print(a[:3])の結果
[6,8,10]	#print(a[2:])の結果
[6,8]		#print(a[2:4])の結果
[8,10]		#print(a[-2:])の結果 → 「最後から2番目」~最後までを取得
[2,4]		#print(a[:-3])の結果 → 最初~「最後から3番目」までを取得

節はじめに戻る


(3)配列サイズの取得

リストのサイズは"len()"で取得できます。
a = [2,4,6]
print(len(a))
3	#print(len(a))の結果

節はじめに戻る


(4)配列要素の書き換え

要素の書き換えは次のようにします。
a = [2,4,6]
print(a)

a[1] = 8
print(a)
[2,4,6]	#書き換え前
[2,8,6]	#書き換え後

節はじめに戻る


1.2.多次元配列

  1. 配列の設定とサイズの取得
  2. 配列要素の取得
  3. 配列要素の書き換え
  4. 配列構造の取り方例

(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]

節はじめに戻る


参考文献