Python 備忘録: リストの宣言
疑似コードに次のような文が出てくることがある.(以下は,マージソートの補助手続きMERGEの疑似コードの一部)
3: 配列 L[1..n1 + 1] と R[1..n2 + 1] を作成する.
4: for i = 1 to n1
5: L[i] = A[p + i − 1]
Python では,変数は宣言する必要がなく初めて値を代入したときに自動的に作成される.ただし,リストはそういうわけには行かず,次のコードを実行すると…
for i in range(n1):
L[i] = A[p + i]
NameError: name ‘L’ is not defined とエラーメッセージが表示される.リストは「宣言」しないと要素に値を代入できないので,全部が 0 で埋まったリストを作らないといけない.(別に 0 である必要はない.)
L = [0] * (n1 + 1)
R = [0] * (n2 + 1)
これで要素数が n1+1 と n2 + 1 のリスト L と R が作成され,値を代入できるようになる.あとは,for文なりwhile文なりを使ってリスト A から値をコピーしよう.
ちなみに,for文を使わずに,リスト内包表記とスライスを使って,
L = [i for i in A[p:q + 1]]
とすることもできる. リスト内包表記とスライスを使っていると Python を使いこなせてますよ感がでる.