Jemand hat mich kürzlich auf Twitter gefragt, warum Python die 0-basierte Array-Indizierung (im Folgenden als 0-basiert bezeichnet) verwendet, und mich gebeten, einen Artikel zu diesem Thema zu lesen (sehr interessant). Das hat bei mir viele Erinnerungen geweckt. Die ABC-Sprache, einer der Vorfahren von Python, verwendet eine 1-basierte Indizierungsmethode (im Folgenden als 1-basiert bezeichnet), während die C-Sprache, eine andere Sprache, die einen großen Einfluss auf Python hat, eine 0-basierte Methode verwendet. Einige der ersten Sprachen, die ich lernte (Algol, Fortran, Pascal), basierten auf 1, andere waren fließend. Ich denke, einer der Gründe, warum ich mich für die 0-basierte Indizierung in Python entschieden habe, war die Slice-Syntax von Python.
Schauen wir uns zunächst an, wie man Slices verwendet. Die vielleicht häufigste Verwendung ist „die ersten n Bits aus dem Array herausschneiden“ oder „n Bits ab dem i-ten Bit des Werts herausschneiden“ (ersteres ist eigentlich eine spezielle Verwendung von i==dem Startbit) . Es wäre sehr elegant, diese Syntax zu verwenden, ohne sie in einem hässlichen +1- oder -1-Komplement ausdrücken zu müssen.
Unter Verwendung der 0-basierten Indizierung wird Pythons halboffenes Intervall-Slicing und die Standard-Matching-Intervall-Slicing-Syntax sehr schön: a[:n] und a[i:i+n], die Standardschrift des ersteren ist a[0:n].
Wenn es sich um eine 1-Basis-Indizierungsmethode handelt und Sie möchten, dass a[:n] als „Nehmen Sie die ersten n Elemente“ ausgedrückt wird (dies ist nicht möglich), müssen Sie entweder eine geschlossene Intervall-Slicing-Syntax verwenden oder diese verwenden in der Slicing-Syntax Die Form von zwei Parametern: Startbit des Slice und Länge des Slice. Bei Verwendung der 1-basierten Indizierung wird die Syntax für halboffene Intervalle unelegant. Auf diese Weise wird die geschlossene Intervall-Slicing-Syntax verwendet. Um auszudrücken, dass n Elemente von der i-ten Position genommen werden, müssen Sie a[i:i+n-1] schreiben. Wenn Sie einen 1-basierten Index verwenden, scheint es angemessener zu sein, die Form von Slice-Startbit + Länge zu verwenden. Auf diese Weise können Sie ein[i:n] schreiben. Tatsächlich tut dies die ABC-Sprache – sie verwendet einen eindeutigen Ausdruck, geschrieben a@i|n. (Siehe http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS.
Aber gilt die index:length-Methode auch in anderen Situationen? Um ehrlich zu sein, kann ich mich nicht mehr an viel daran erinnern, aber ich glaube, ich war von der Eleganz der halboffenen Intervallsyntax fasziniert. Insbesondere wenn die beiden Slicing-Operationen benachbart sind und der Endindexwert der ersten Slicing-Operation der Startindexwert des zweiten Slice ist, ist es zu schön, um es zu verwerfen. Sie möchten beispielsweise ein Array an zwei Punkten i und j in drei Teile zerlegen – die drei Teile sind a[:i], a[i:j] und a[j:].
Aus diesem Grund möchte ich, dass Python eine 0-basierte Indizierung verwendet.
Englischer Originaltext: Warum Python 0-basierte Indizierung verwendet
Das obige ist der detaillierte Inhalt vonDer Begründer der Python-Sprache erklärt, warum Python-Arrays ab 0 indiziert werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!