Negatives Python-Subskript

8

Ich lese gerade Robert Sebestas Konzepte der Programmiersprachen, 10. Ausgabe (2012). Im Kapitel über Datentypen heißt es "Ruby und Lua unterstützen negative Indizes, aber Python nicht". Ich dachte Negative Indizes könnten in Python mit list_name[-i] gemacht werden. Was sind dann negative Indices?

    
Felipe Cortez 02.03.2014, 17:07
quelle

2 Antworten

6

Python, Lua und Ruby unterstützen negative Indizes. In Python wurde diese Funktion als eine Fußnote in Version 1.4 und als erweitertes Slicing in Version 2.3 bestätigt

Auf S.264 von Sebestas Buch (10. Aufl.) behauptet er, Python unterstützt keine negative Indexierung auf Arrays. Der Originaltext wurde 2004 als Edition 6 überarbeitet und neu veröffentlicht, während Python 2.3 am 29. Juli 2003 veröffentlicht wurde. Ich nehme an, dass das erweiterte Slicing seit der Veröffentlichung von Sebestas 6. Ausgabe übersehen wurde.

Ich kann keine Errata für die 10. Ausgabe finden. Sie können dem Autor eine E-Mail senden und ihn informieren.

    
Myles Baker 02.03.2014, 17:38
quelle
1

In Python und Ruby indexiert ein negativer Index rückwärts vom Ende des Arrays. Das heißt, wenn der Index negativ ist, wird die Array-Länge hinzugefügt.

Dies ist in Lua nicht der Fall. Ein negativer Index hat keine spezielle Bedeutung; es referenziert einfach oder erstellt einen Tabelleneintrag mit dieser negativen Zahl als Schlüssel.

Python 2.7.3:

%Vor%

Ruby 1.9.3:

%Vor%

Lua 5.2.3:

%Vor%

JavaScript's Verhalten ist dem von Lua ziemlich ähnlich. Sie können einen negativen Index für ein Array verwenden, und tatsächlich können Sie einen beliebigen String als Index verwenden. Ein JavaScript-Array ist eigentlich ein Objekt mit einigen zusätzlichen Methoden, Eigenschaften ( .length ) und Verhalten (Aktualisierung von .length nach Bedarf). Wenn Sie array[-1] verwenden, fügen Sie eine Eigenschaft mit dem Schlüssel "-1" hinzu oder verweisen auf diese, und .length wird nicht aktualisiert.

Chrome 33:

%Vor%

Lassen Sie sich nicht von der am Ende gedruckten undefined irreführen - das ist nicht Teil der Aufzählung for( var key in a ) , sie wird nur dort gedruckt, weil console.log() der letzte in der Schleife ausgewertete Ausdruck ist und kein a zurückgibt Wert (es druckt nur einen Wert aus).

    
Michael Geary 02.03.2014 18:18
quelle

Tags und Links