てきとうなメモ

本の感想とか技術メモとか

Pythonはなぜ0-based indexingなのか

Guido曰く、スライス操作で最もよく使われるのは「最初のn個を取得する」のと「i番目からn個取得する」なのだが、0-based indexingの方がきれいに表現できるかららしい。

現在のPyhtonは0-based indexingであり、スライスは半開区間で表される。そのため、a[m:n]はmからn-1までの部分リストを指す。この仕様だと上記の操作はa[:n],a[i:n]ときれいに表現できる。ただし、a[:n]は0が省略されている。

1-based indexingでスライスが半階区間だとすると、上記の操作は[:n+1], a[i:i+n]となる。ただし、a[:n]は1が省略されているとする。a[i:i+n]は良いがa[:n+1]がきれいではない

1-based indexingでスライスが閉区間だとすると、上記の操作はa[:n],a[i:i+n-1]となり、a[i:i+n-1]がきれいではない

1-based indexingでスライスがa[start:length]という仕様ならば、a[:n],a[i:n]となり、きれいである。しかし、aをi,jで分割した場合、a[:i],a[i:j],a[j:]できれいに分割できる。

よって、0-based indexingが良い

ということらしい。

だいたい同意だが、a[start:length]を否定する理由はちょっと弱いかな