Als Vincenzooo richtig sagt, die pythonic lst[:-n] funktioniert nicht, wenn n==0.
Folgende arbeiten für alle n>=0:
lst = lst[:-n orNone]
Mir gefällt diese Lösung, weil es ist eine Art, lesbar auch in Englisch: "return eine Scheibe weglassen der letzten n-Elemente oder keine (wenn keine, muss weggelassen werden)".
Diese Lösung funktioniert, weil der folgende:
x or y ausgewertet x wenn x logisch wahr ist (z.B., wenn es nicht 0, "", False, None, ...) und zu y sonst. So -n or None ist -n wenn n!=0 und None wenn n==0.
Beim Slicen, None entspricht das weglassen der Wert, so lst[:None] ist das gleiche wie lst[:] (siehe hier).
Sehe ich dies gefragt wurde, lange ist es her, aber keine der Antworten hat es für mich; was ist, wenn wir wollen, um eine Liste ohne die letzten N Elemente, aber behalten Sie das original: tun Sie nur list[:-n]. Wenn Sie brauchen, um Fälle zu behandeln, wo n kann gleich 0 Sie tun list[:-n or None].
>>> a =[1,2,3,4,5,6,7]>>> b = a[:-4]>>> b
[1,2,3]>>> a
[1,1,2,3,4,5,7]
Dies ist einer der Fälle, in denen als pythonic bei mir nicht funktioniert, und man kann verborgene Fehler oder Durcheinander.
Keine der oben genannten Lösungen arbeiten, die für den Fall n=0.
Mit l[:len(l)-n] funktioniert im Allgemeinen Fall:
l=range(4)for n in[2,1,0]:#test values for numbers of points to cutprint n,l[:len(l)-n]
Dies ist nützlich, zum Beispiel in einer Funktion zum zuschneiden von Kanten-Vektor, wo Sie möchten, lassen Sie die Möglichkeit nicht nichts geschnitten.
Ist es viel schneller, da es wirklich entfernt Elemente aus dem vorhandenen array. Das Gegenteil (a = a[:len(a)-1]) erstellt eine neue Liste Objekt und weniger effizient.
wenn Sie möchten, entfernen Sie die letzten n-Elemente, in anderen Worten, halten Sie den ersten len - n Elemente:
Hinweis: Dies ist keine in-memory-Betrieb. Es würde eine Kopie erstellen.
InformationsquelleAutor der Antwort karthikr
Werke für
n >= 1
InformationsquelleAutor der Antwort jamylak
Als Vincenzooo richtig sagt, die pythonic
lst[:-n]
funktioniert nicht, wennn==0
.Folgende arbeiten für alle
n>=0
:Mir gefällt diese Lösung, weil es ist eine Art, lesbar auch in Englisch: "return eine Scheibe weglassen der letzten n-Elemente oder keine (wenn keine, muss weggelassen werden)".
Diese Lösung funktioniert, weil der folgende:
x or y
ausgewertetx
wennx
logisch wahr ist (z.B., wenn es nicht0
,""
,False
,None
, ...) und zuy
sonst. So-n or None
ist-n
wennn!=0
undNone
wennn==0
.None
entspricht das weglassen der Wert, solst[:None]
ist das gleiche wielst[:]
(siehe hier).InformationsquelleAutor der Antwort Luca Citi
Sehe ich dies gefragt wurde, lange ist es her, aber keine der Antworten hat es für mich; was ist, wenn wir wollen, um eine Liste ohne die letzten N Elemente, aber behalten Sie das original: tun Sie nur
list[:-n]
. Wenn Sie brauchen, um Fälle zu behandeln, won
kann gleich0
Sie tunlist[:-n or None]
.So einfach ist das.
InformationsquelleAutor der Antwort chamini2
Nur versuchen zu del.
InformationsquelleAutor der Antwort Yarkee
Dies ist einer der Fälle, in denen als
pythonic
bei mir nicht funktioniert, und man kann verborgene Fehler oder Durcheinander.Keine der oben genannten Lösungen arbeiten, die für den Fall n=0.
Mit
l[:len(l)-n]
funktioniert im Allgemeinen Fall:Dies ist nützlich, zum Beispiel in einer Funktion zum zuschneiden von Kanten-Vektor, wo Sie möchten, lassen Sie die Möglichkeit nicht nichts geschnitten.
InformationsquelleAutor der Antwort Vincenzooo
Sollte mit diesem:
oder so:
Ist es viel schneller, da es wirklich entfernt Elemente aus dem vorhandenen array. Das Gegenteil (
a = a[:len(a)-1]
) erstellt eine neue Liste Objekt und weniger effizient.Wenn
0 < n
können Siea[-n:] = []
oderdel a[-n:]
die ist noch schneller.InformationsquelleAutor der Antwort wonder.mice