Esiste un modo migliore per rimuovere gli ultimi N elementi di un elenco.Rimuovere gli ultimi N elementi di un elenco
for i in range(0,n):
lst.pop()
Esiste un modo migliore per rimuovere gli ultimi N elementi di un elenco.Rimuovere gli ultimi N elementi di un elenco
for i in range(0,n):
lst.pop()
se si desidera rimuovere gli ultimi n elementi, in altre parole, tenere prima len - n elementi:
lst = lst[:len(lst)-n]
Nota: Questo non è un'operazione in memoria. Creerebbe una copia.
nota che questo in realtà rende una copia dell'elenco fino all'ennesimo elemento, anche se di solito non avrà mai un grande impatto – jamylak
Oh .. :) Solo fatto una nota – karthikr
Come può essere questa la risposta accettata ?! Non dà nemmeno un risultato corretto .. – Vincenzooo
occupazione dei n >= 1
>>> L = [1,2,3, 4, 5]
>>> n=2
>>> del L[-n:]
>>> L
[1, 2, 3]
Questo ha lo stesso problema menzionato per altre risposte: non funziona per n <= 0. (0 cancella la lista, <0 cancella dal fronte della lista, che potrebbe essere corretta ma potrebbe non esserlo). Se puoi risparmiare tempo per copiare la lista, penso che la risposta a slice di Luca Citi sia migliore, altrimenti hai bisogno di un controllo per n> 0. –
@DanielB. Non funziona su n <= 0 ma è una soluzione semplice e può risolvere i bisogni di molti casi d'uso. Aiuta anche a educare le persone nuove a Python. Chiunque può sentirsi libero di usare qualsiasi soluzione, quindi è bene che abbiamo una varietà – jamylak
vedo questo è stato chiesto un molto tempo fa, ma nessuna delle risposte lo facevano per me; cosa succede se vogliamo ottenere una lista senza gli ultimi N elementi, ma manteniamo quella originale: basta fare list[:-n]
. Se è necessario gestire i casi in cui n
può essere uguale a 0
, è possibile eseguire 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]
Semplice.
Questo è uno dei casi in cui essere pythonic
non funziona per me e può dare bug o problemi nascosti. Nessuna delle soluzioni precedenti funziona per il caso n = 0. Utilizzando l[:len(l)-n]
opere nel caso generale:
l=range(4)
for n in [2,1,0]: #test values for numbers of points to cut
print n,l[:len(l)-n]
Questo è utile per esempio in una funzione per tagliare i bordi di un vettore, in cui si vuole lasciare la possibilità di non tagliare nulla.
Come dice giustamente Vincenzooo, il python lst[:-n]
non funziona quando n==0
.
le seguenti opere per tutti n>=0
:
lst = lst[:-n or None]
Mi piace questa soluzione perché è una specie di leggibile anche in inglese: "restituire una fetta omettendo gli elementi di n ultimi o nessuno (se non ha bisogno di essere omessi)".
Questa soluzione funziona per i seguenti motivi:
x or y
viene valutato come x
quando x
è logicamente vero (ad esempio, quando non è 0
, ""
, False
, None
, ...) e per y
altrimenti . Quindi -n or None
è -n
quando n!=0
e None
quando n==0
.None
equivale ad omettere il valore, quindi lst[:None]
corrisponde a lst[:]
(vedere here).Questa soluzione è di gran lunga la più cortese E PEP8 amichevole. È particolarmente bello perché rappresenta il caso di 0. Tuttavia, per rispondere alla domanda come viene richiesta, potresti voler cambiare la tua risposta a un compito come questo: "lst = lst [: - n o None]" –
non chiamare la lista, 'lista'.oppure non sarai in grado di utilizzare la classe 'lista' integrata – jamylak
Daniel, seleziona la risposta appropriata (Luca Citi) a questa domanda. – Sheljohn