Warum verursacht Pythons List-Slicing keinen Index-of-Bound-Fehler? [Duplikat]

8

Beim Spielen mit Array-Slicing habe ich festgestellt, dass der a[index:] or a[:index] -Typ des Slicings keinen Array-Index außerhalb des Bound-Fehlers für Strings erzeugt.

%Vor%

erzeugt Ausgabe:

%Vor%

Kann jemand erklären, warum? Sollte es Array-Index außerhalb des zulässigen Bereichs nicht erzeugen? Python erzeugt diesen Fehler, wenn ich versuche, etwas wie: print str[10] .

zu tun     
tejas 09.04.2014, 01:16
quelle

2 Antworten

11
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123string ___ Eine Zeichenfolge ist eine endliche Abfolge von Symbolen, die üblicherweise für Text verwendet wird, manchmal jedoch auch für beliebige Daten. ___ tag123list ___ Liste kann sich beziehen auf: eine verkettete Liste (eine geordnete Menge von Knoten, die jeweils auf ihren Nachfolger verweisen) oder eine Form eines dynamischen Arrays. Um nicht für HTML-Listen verwendet zu werden, verwenden Sie stattdessen [html-lists]. ___ tag123python27 ___ Python 2.7 soll die letzte Hauptversion der 2.x-Reihe sein. Verwenden Sie dieses Tag nicht einfach, um die von Ihnen verwendete Python-Version zu vermitteln, es sei denn, die Frage bezieht sich auf ein Python 2.7-spezifisches Problem. Verwenden Sie das allgemeinere [python] -Tag. ___ answer22951137 ___

So ist der Slicing-Operator in Python implementiert. Wenn die Array-Indizes außerhalb der Grenzen liegen, wird sie automatisch an den richtigen Stellen abgeschnitten.

    
___ antwort22951149 ___

Slicing wird verwendet, um eine neue Liste zu erstellen . Wenn die Indizes nicht in den Bereich der Anzahl der Elemente in der Liste fallen, können wir eine leere Liste zurückgeben. Also müssen wir keinen Fehler werfen.

Wenn wir jedoch versuchen, auf die Elemente in der Liste zuzugreifen, die größer als die Anzahl der Elemente ist, können wir keinen Standardwert zurückgeben (nicht einmal None , da es ein gültiger Wert in der Liste sein könnte). Deshalb

%Vor%

wird ausgelöst.

Wenn der Startindex während des Slicens größer oder gleich der Länge der Sequenz ist, wird die Länge der zurückgegebenen Sequenz auf 0 gesetzt, in diesem Fall line

%Vor%

Wenn für die Strings die Länge der Zeichenfolge, die nach dem Slicing zurückgegeben werden soll, 0 ist, wird eine leere Zeichenfolge in diese Zeile

%Vor%     
___ tag123slice ___ Ein Slice ist eine Darstellung eines Teils einer Sequenz, die normalerweise durch einen Verweis auf die zugrunde liegende Sequenz definiert wird, einen Index, der die Startposition, eine Länge oder Endposition und optional einen "Schritt" - oder "Schritt" -Wert angibt. Bitte verwenden Sie die Tags "object-slicing" für das Slicing-Problem in C ++ und "program-slicing" für die Analysetechnik. ___ qstnhdr ___ Warum verursacht Pythons List-Slicing keinen Index-of-Bound-Fehler? [Duplikat] ___ qstntxt ___

Beim Spielen mit Array-Slicing habe ich festgestellt, dass der %code% -Typ des Slicings keinen Array-Index außerhalb des Bound-Fehlers für Strings erzeugt.

%Vor%

erzeugt Ausgabe:

%Vor%

Kann jemand erklären, warum? Sollte es Array-Index außerhalb des zulässigen Bereichs nicht erzeugen? Python erzeugt diesen Fehler, wenn ich versuche, etwas wie: %code% .

zu tun     
___
thefourtheye 09.04.2014, 01:21
quelle
1

So ist der Slicing-Operator in Python implementiert. Wenn die Array-Indizes außerhalb der Grenzen liegen, wird sie automatisch an den richtigen Stellen abgeschnitten.

    
bgamlath 09.04.2014 01:19
quelle

Tags und Links