Ich verstehe, dass somelist[len(somelist)]
nicht auf einen Index zugreifen kann, der außerhalb der definierten Liste liegt - das ist sinnvoll.
Aber warum erlaubt Python dann somelist[len(somelist):]
?
Ich habe sogar gelesen, dass somelist[len(somelist):] = [1]
äquivalent zu somelist.append(1)
Aber warum ändert Slice-Notation die Tatsache, dass der Index "len (somelist)" immer noch außerhalb des Bereichs der Liste liegt?
Hier ist etwas aus der Dokumentation . Es gibt spezifische Regeln für das Slicing von Iterablen; Besonders hervorzuheben ist # 4, Betonung meins:
Die Scheibe von
s
voni
bisj
ist definiert als die Reihenfolge der Artikel mit indexk
so dassi <= k < j
. Wenni
oderj
größer alslen(s)
ist, verwenden Sie %Code%. Wennlen(s)
weggelassen wird oderi
, verwenden SieNone
. Wenn0
weggelassen wird oderj
, verwenden Sie %Code%. WennNone
größer oder gleichlen(s)
ist, ist das Segment leer.
Es gibt nichts am Index len(somelist)
(Listenindizes beginnen bei 0 in Python). Wenn Sie versuchen, auf ein nicht vorhandenes Element zuzugreifen, tritt ein Fehler auf.
Beim Listen-Slicing (mit der myList[i:]
-Syntax) wird jedoch eine neue Liste zurückgegeben, die die Elemente einschließlich und nach i
enthält. Da sich am Index i
(oder danach) keine Elemente in der Liste befinden, wird eine leere Liste zurückgegeben
Aus den Python-Dokumenten :
Entartete Slice-Indizes werden elegant gehandhabt: Ein Index, der zu groß ist, wird durch die String-Größe ersetzt, eine obere Grenze, die kleiner ist als die untere, gibt eine leere Zeichenfolge zurück.
Also ein Index & gt; Listengröße wird automatisch korrigiert, und somelist[len(somelist):]
gibt die Elemente nach der letzten zurück, dh nada .