インデックスの謎

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

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

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

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

メモリ上のデータ

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

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

配列に入ったデータ

配列に入ったデータ

左側から"大吉"、"中吉"、"小吉"を詰めて入れられています。配列の入った場所に数直線の目盛を振ると、"大吉"は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、というふうに数える国があります。日本の呼び方に慣れていると奇異に見えますが、このヨーロッパの呼び方にも合理的な理由があるのです。

arrayindexzero_europe.png

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