Warum ist die Liste [:: – 1] nicht gleich Liste [: len (list): – 1]?

Beim Aufschneiden in Python, Auslassen des Endabschnitts der Scheibe (dh das Ende in der list[:end:] ) ergibt sich, dass das end als "die Größe des Strings, der geschnitten wird" definiert wird. *

Allerdings scheint dies bei der Verwendung des step Arguments (der Schritt in der list[::step] ) in einer Scheibe nicht wahr zu halten, zumindest wenn das step Argument -1 . Ein einfaches Beispiel:

 >>> l = [1, 2, 3] >>> l[::-1] [3, 2, 1] >>> l[:len(l):-1] [] 

Dies deutet darauf hin, dass im Fall eines durchgelassenen Schrittarguments ein weggelassener Endwert nicht gleichbedeutend ist, um explizit die Größe des zu schneidenden Objekts zu übergeben.

Vielleicht ist das nur ein Versagen von mir, die Dokumentation zu lesen, aber ich möchte gern verstehen, warum mein obiges Beispiel der Python-Dokumentation über das Weglassen von Endwerten in Scheiben widerspricht und idealerweise wo diese anders dokumentiert ist.


* Slice-Indizes haben nützliche Vorgaben; Ein weggelassener erster Index standardmäßig auf Null gesetzt, ein weggelassener zweiter Index standardmäßig auf die Größe des Strings, der geschnitten wird.

2 Solutions collect form web for “Warum ist die Liste [:: – 1] nicht gleich Liste [: len (list): – 1]?”

Die Dokumentation, die Sie referenzieren, ist das Tutorial, das nur einen informellen Überblick über Python-Syntax und Semantik gibt. Es erklärt nicht alle Details. Sie werden feststellen, dass die Tutorialseite, mit der Sie verknüpft sind, nicht einmal negative Indizes bespricht.

Die eigentliche Dokumentation ist in der Bibliotheksreferenz unter Sequenzarten angegeben . Obwohl es ein bisschen knapp ist und nicht leicht zu verstehen, bei einem ersten lesen, klärt es das für eine Scheibe [i:j:k] :

Wenn i oder j weggelassen werden oder keine, werden sie zu "End" -Werten (welches Ende hängt vom Zeichen von k ab).

l[::-1] ist dasselbe wie l.__getitem__(slice(None, None, -1)) . Seit dem Start und dem Stopp sind beide None , die Liste wird von einem Ende zum anderen durchlaufen. Das Schrittargument bestimmt sowohl die Richtung als auch den Schritt.

  • Was bedeutet "Ergebnis [:: - 1]"?
  • Pythonscheibenobjekte und __getitem__
  • Umwickeln einer Python-Liste als Slice-Operation
  • Die pythonischste Art, eine Python-Liste alle 100 Elemente zu schneiden
  • Wie man Scheiben in den Fenstern öffnet und Daten auf niedrigem Niveau liest?
  • Python ist die beste Programmiersprache der Welt.