2014-10-03 9 views
7

Ich habe Leute gesehen nur sagen, eine neue Scheibe erstellen, indem den altenWie entferne ich das letzte Element aus einer Schicht?

*slc = append(*slc[:item], *slc[item+1:]...) 

anhängen, aber was ist, wenn Sie das letzte Element in der Scheibe entfernen?

Wenn Sie versuchen, i (das letzte Element) durch i+1 zu ersetzen, gibt es einen Fehler außerhalb der Grenzen zurück, da es keine i+1 gibt.

Antwort

12

Sie können len() verwenden, um die Länge und Re-Scheibe mit dem Index vor dem letzten Element zu finden:

if len(slice) > 0 { 
    slice = slice[:len(slice)-1] 
} 

Click here to see it in the playground

+0

Was schlägt fehl, wenn 'len (slice) == 0':' panic: Laufzeitfehler: Slice-Grenzen außerhalb des Bereichs '. – peterSO

+0

... nun ja. Das war nicht Teil der Frage .. aber ich werde meine Antwort aktualisieren, um damit zu helfen. –

+2

Auch, nein: =, Scheibe ist bereits definiert. :) – LinearZoetrope

0

TL; DR:

myslice = myslice[:len(myslice) - 1] 

Übrigens wird dies scheitern, wenn "myslice" die Größe 0 hat.

Lange Antwort:

myslice = myslice[:len(myslice) - 1] 

Dies wird fehlschlagen, wenn "myslice" Null Größe.

Slices sind Datenstrukturen, die auf ein zugrunde liegendes Array zeigen, und Operationen wie das Slicen eines Slices verwenden dasselbe zugrunde liegende Array.

Das bedeutet, dass wenn Sie eine Scheibe schneiden, die neue Scheibe immer noch auf die gleichen Daten wie die ursprüngliche Scheibe zeigt.

Wenn Sie das oben beschriebene tun, befindet sich das letzte Element immer noch im Array, aber Sie können es nicht mehr referenzieren.

bearbeiten

Klarstellung: Wenn Sie das Stück auf seine ursprüngliche Länge partitionieren werden Sie das letzte Objekt

/bearbeiten

Wenn Sie ein wirklich haben verweisen können, Big Slice und Sie möchten auch das zugrunde liegende Array beschneiden, um Speicher zu sparen. Wahrscheinlich wollen Sie "copy" verwenden, um ein neues Slice mit einem kleineren darunter liegenden Array zu erstellen und den alten großen Slice Müll sammeln zu lassen.

+0

@tommywild: Es wurde eine Klarstellung bezüglich der Referenzierung des letzten Elements hinzugefügt. Ich verstehe, dass es dort implizit ist, wenn man erklärt, was man tut, wenn man das Element "entfernt". In der Tat könnten Sie auch einfach append verwenden. Wenn diese Änderung Sie zufriedenstellt, können Sie die -1 entfernen? Ehrlich glaube ich nicht einmal so wie es war, bevor es ein verdient -1:/ – DallaRosa

+0

@tommywild Ok :) Wie auch immer, Ihre Punkte waren gültig, danke für Hinweis darauf :) – DallaRosa

+1

Nicht sicher, warum die -1 .. also habe noch eine weitere Verbesserung. Ihre Antwort ist in der Tat umfassender als meine. –

Verwandte Themen