配列の添え字が1でなく0から始まる理由

unko = ['k', 'u', 's', 'o']

このとき、変数unkoがメモリ上のどこを指しているかというと

アドレス   値     
1000 k  ←ここ
1001 u
1002 s
1003 o

配列データの先頭のアドレス(1000)を指している。
実際に値を取り出すためには、unko[0]とすることで、 k という値を参照できる。
 
 
【配列の添え字が0から始まる場合】
2文字目の u を参照したいときにunko[1] とすることで、

1000 + 1 == 1001(アドレスの番地)

のように参照することができる。
 
 
【添え字が1から始まる場合】

先頭の値は unko[1] => k で問題ないとしても、

2文字目の u を参照するときに

1000 + 2 - 1 == 1001

のような -1 が必要になってくる。