最近、ある人が Twitter で、なぜ Python が 0 ベースの配列インデックス付け (以下、0 ベースと呼びます) を使用するのかを尋ね、このトピックに関する記事を読むように頼んできました (非常に興味深い)。これは私にたくさんの思い出をもたらしました。 Python の先祖の 1 つである ABC 言語は 1 ベースのインデックス付け方法 (以下、1 ベースと呼びます) を使用しますが、Python に大きな影響を与えたもう 1 つの言語である C 言語は 0 ベースの Way を使用します。私が最初に学んだ言語 (Algol、Fortran、Pascal) の一部は 1 ベースで、一部は流動的でした。私が Python で 0 から始まるインデックスを使用することにした理由の 1 つは、Python のスライス構文だったと思います。
まずはスライスの使い方を見てみましょう。おそらく最も一般的な使用法は、「配列から最初の n ビットを切り出す」または「値の i 番目のビットから始まる n ビットを切り出す」ことです (前者は実際には i== 開始ビットの特別な使用法です)。 。醜い +1 または -1 の補数で表現する必要がなく、この構文を使用できれば非常に洗練されます。
0 ベースのインデックスを使用すると、Python の半開区間スライスとデフォルトの一致区間スライス構文は非常に美しくなります: a[:n] と a[i:i+n]。前者の標準的な書き方は a[0: n] です。
1 ベースのインデックス付け方法の場合、a[:n] を「最初の n 要素を取得する」ように表現したい場合 (これは不可能です)、閉間隔スライス構文を使用するか、それを使用する必要があります。スライス構文内 スライス開始ビットとスライス長の 2 つのパラメータの形式。 1 ベースのインデックスを使用すると、半開間隔スライス構文は不要になります。このように、閉区間スライス構文が使用され、i 番目の位置から n 個の要素を取得することを表現するには、a[i:i+n-1] と記述する必要があります。この観点から、1 から始まるインデックスを使用する場合は、スライス開始ビット + 長さの形式を使用する方が適切です。このようにして a[i:n] を書くことができます。実際、ABC 言語ではこれが行われ、a@i|n と書かれた独自の表現が使用されます。 (http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS を参照してください。
しかし、index:length メソッドは他の状況にも適用できるでしょうか?正直に言うと、あまり覚えていないのですが、半開区間構文の優雅さに魅了されたと思います。特に、2 つのスライス操作が隣接しており、最初のスライス操作の終了インデックス値が 2 番目のスライスの開始インデックス値である場合、それは破棄するには美しすぎます。たとえば、配列を 2 点 i と j で 3 つの部分に分割するとします。その 3 つの部分は、a[:i]、a[i:j]、および a[j:] になります。
これが、Python で 0 から始まるインデックスを使用する理由です。
英語原文: なぜ Python は 0 から始まるインデックスを使用するのか
以上がPython 言語の創始者が、Python 配列のインデックスが 0 から始まる理由を説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。