コンテンツにスキップ

なぜ配列のインデックスは0から始まるのか

インデックスの謎

たとえばPythonの場合、配列(リスト)は以下のように使用します。

kuji = ["大吉","中吉","小吉"]
print(kuji[0]) # "大吉"が表示される
print(kuji[1]) # "中吉"が表示される
print(kuji[2]) # "小吉"が表示される

配列 kuji の最初の要素は、 1 ではなく 0 で指定します。この数字のことをインデックスと言います。なぜインデックスは1ではなく0始まりなのでしょうか?

ふつう、ものを数えるとき、「1番、2番、3番・・・」と数えますよね。「あなたはこのテーマパーク0番目の入場者です!豪華賞品がプレゼントされます!!」みたいなふうには言いません。なのに、配列の場合には1からではなく0から数えるのです。これはなぜでしょうか?

メモリ上のデータ

配列がコンピュータ上でどのように保存されいているかを考えると理解しやすいかもしれません。

配列のデータは、コンピュータのメモリに以下の図のように入っています。

GS-07-01.png

配列に入ったデータ

左側から”大吉”、“中吉”、“小吉”を詰めて入れられています。配列の入った場所に数直線の目盛を振ると、“大吉”は0から1の間に、“中吉”は1から2の間、“小吉”は2から3の間に入っています。

さてこのとき、“大吉”の位置を人に伝えるのに、どう言うとわかりやすいでしょうか?

A:左端の位置を伝える。「“大吉”は0の位置です」

B:右端の位置を伝える。「“大吉”は1の位置です」

C:真ん中の位置を伝える。「“大吉”は0.5の位置です」

AもBも端を表しているのでちょっと違和感がありますが、かといって中間のCの場合、“大吉”などのデータの大きさによっては計算が難しそうです。

すると、AかBのどちらかになりますが、この目盛は左端から始まるので左端の0のほうがわかりやすいと言えるでしょう。こういう理由で、配列の中のデータを示すときは、最初の要素は0で数えるのです。

階の呼び方の例

最初のものを0と数えることは実はプログラミング言語以外にもあります。有名な例は建物の階数の数え方でしょう。日本では玄関がある階を1F、その上を2F、3Fと数えますが、ヨーロッパには玄関がある階を0F、その上を1F、2F、というふうに数える国があります。日本の呼び方に慣れていると奇異に見えますが、この ヨーロッパの呼び方にも合理的な理由がある のです。

GS-07-02.png

日本の呼び方とヨーロッパの呼び方の違いは、階の計算をする時に現れます。

たとえば1F(ヨーロッパでは0F)から4F(ヨーロッパでは3F)に行くとき、階段を何回登るかの計算は、日本式では4-1=3、ヨーロッパ式でも3-0=3で3回登ればいいというふうにすぐ求めることができます。

ではB1F(ヨーロッパでは-1F)から2F(ヨーロッパでは1F)に行くときはどうでしょうか?日本式でも、ヨーロッパ式に合わせてB1Fは-1Fと呼ぶとすると、2-(-1) = 3で、3回登ることになります。しかし実際にはB1Fから1F、1Fから2Fの2回のはずです。なので、B1Fを0Fと読み替えるか、2Fを1Fと読み替えるかのどちらかが必要になります。この点、ヨーロッパ式では、1-(-1)=2で、 直感的に計算できる のです。