2016-07-10 11 views
2

Ich habe es mit Python's Slicing zu tun und bin auf unerwartete Ergebnisse gestoßen.Ist dieses Slicing-Verhalten definiert?

Beispiel:

print([1, 2, 3][0:-4:-1]) 

Returns [1]

print([1, 2, 3][0:-3:-1]) 
print([1, 2, 3][0:-2:-1]) 
print([1, 2, 3][0:-1:-1]) 

Jede dieser Erträge [] (wie erwartet).

Wie passiert das?

Danke, Reyha24.

+0

Fragen Sie nur nach dem ersten Beispiel? – zondo

+0

@zondo: Ja. Die anderen sind mir klar. – Reyha24

+0

Dies ist ein definiertes Verhalten. Es ist ähnlich wie "[1, 2, 3] [2: 3]", nur rückwärts statt vorwärts. – user2357112

Antwort

2

In einem slice ist das erste Element (Start) inklusive. Das zweite Argument (Stop) ist ex. Wenn ein Halt von -3 gegeben ist, bedeutet dies, von 1 zu 1 zu gehen. Da der Stopp exklusiv ist, schließt das das einzige Element aus und das Ergebnis ist leer. Wenn -2 angegeben wird, wird es in den Index 1 übersetzt. Sobald Index 0 angegeben wird, haben Sie den Index 1 bereits übergeben, da der Schritt negativ ist. Daher ist das Ergebnis leer. Du bekommst etwas Ähnliches mit -1. Wenn Sie -4 vom Ende nehmen, wird jedoch -1, da nur drei Elemente in der Liste vorhanden sind. Es ist möglich, von 0 bis -1 mit einem negativen Schritt zu gehen: Index 0 ist enthalten, Index -1 ist nicht, weil er später in der Liste erscheint.

+0

Danke, Zondo. Deine Antwort ist großartig! Ich glaube ich habe etwas durcheinander gebracht. Können Sie mir sagen, wie die anderen drei Beispiele zu ihren Ergebnissen kommen? Denn wenn ich dieser Regel folge, sollte das Element am Index 0 enthalten sein, oder? – Reyha24

+1

@ Reyha24: Sehr guter Punkt. Ich glaube ich habe es auch falsch verstanden. Siehe meine bearbeitete Antwort. – zondo

+0

Sie und TheBackCat haben es mir klar gemacht. Vielen Dank! – Reyha24

1

Ich denke, das ist klarer, wenn Sie die Scheibe umkehren und in reguläre Indizierung konvertieren. Da Python halboffene Intervalle verwendet, wird [0:-4:-1] in [1, 2, 3][-3:1] konvertiert. -3 entspricht in diesem Fall dem Index 0, also konvertiert dies zu [1, 2, 3][0:1], was nur das erste Element ist. Der zweite Fall, [0:-3:-1], wird in [-2:1] konvertiert, was [1:1] ist, das leer ist. Der dritte Fall konvertiert zu [2:1] und so weiter.

+0

Gute Antwort! Ich hab es jetzt. Haben Sie einen guten Tag! – Reyha24

Verwandte Themen