Quelqu'un m'a récemment demandé sur Twitter pourquoi Python utilise l'indexation de tableau basée sur 0 (ci-après dénommée basée sur 0), et m'a demandé de lire un article sur ce sujet (très intéressant). Cela m’a rappelé beaucoup de souvenirs. Le langage ABC, l'un des ancêtres de Python, utilise une méthode d'indexation basée sur 1 (ci-après appelée basée sur 1), tandis que le langage C, un autre langage qui a une énorme influence sur Python, utilise Way. Certaines des premières langues que j'ai apprises (Algol, Fortran, Pascal) étaient basées sur 1 et d'autres étaient fluides. Je pense que l'une des raisons pour lesquelles j'ai décidé d'utiliser l'indexation basée sur 0 en Python était la syntaxe des tranches de Python.
Voyons d'abord comment utiliser les tranches. L'utilisation la plus courante est peut-être "supprimer les n premiers bits du tableau" ou "supprimer n bits à partir du i-ième bit de la valeur" (le premier est en fait une utilisation spéciale de i==le bit de départ) . Il serait très élégant d'utiliser cette syntaxe sans avoir à l'exprimer dans un vilain complément +1 ou -1.
En utilisant l'indexation basée sur 0, la syntaxe de découpage par intervalle semi-ouvert et de découpage par intervalle de correspondance par défaut de Python devient très belle : a[:n] et a[i:i+n], l'écriture standard du premier est a[0 : n].
S'il s'agit d'une méthode d'indexation à base 1, alors si vous souhaitez que a[:n] soit exprimé comme "prendre les n premiers éléments" (ce n'est pas possible), vous devez soit utiliser une syntaxe de découpage à intervalle fermé, soit l'utiliser dans la syntaxe de découpage. La forme de deux paramètres : le bit de départ de la tranche et la longueur de la tranche. En utilisant l'indexation basée sur 1, la syntaxe de découpage par intervalles semi-ouverts devient inélégante. De cette façon, la syntaxe de découpage par intervalles fermés est utilisée. Afin d'exprimer que n éléments sont pris à partir de la i-ième position, vous devez écrire a[i:i+n-1]. De ce point de vue, si vous utilisez un index basé sur 1, il est plus approprié d'utiliser la forme bit de départ de tranche + longueur. De cette façon, vous pouvez écrire un[i:n]. En fait, c'est ce que fait le langage ABC : il utilise une expression unique, écrite a@i|n. (Voir http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS.
Mais la méthode index:length s’applique-t-elle dans d’autres situations ? Pour être honnête, je ne m'en souviens pas beaucoup, mais je pense que j'ai été fasciné par l'élégance de la syntaxe des intervalles semi-ouverts. Surtout lorsque les deux opérations de découpage sont adjacentes et que la valeur d'indice de fin de la première opération de découpage est la valeur d'indice de départ de la deuxième tranche, c'est trop beau pour être jeté. Par exemple, vous souhaitez couper un tableau en trois parties en deux points i et j - ces trois parties seront a[:i], a[i:j] et a[j:].
C'est pourquoi je souhaite que Python utilise l'indexation basée sur 0.
Texte original en anglais : pourquoi Python utilise l'indexation basée sur 0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!