Czy istnieje lepszy sposób na usunięcie ostatnich elementów N z listy.Usuwanie ostatnich elementów N z listy
for i in range(0,n):
lst.pop()
Czy istnieje lepszy sposób na usunięcie ostatnich elementów N z listy.Usuwanie ostatnich elementów N z listy
for i in range(0,n):
lst.pop()
jeśli chcesz usunąć ostatnie n elementów, czyli innymi słowy, utrzymanie pierwszego len - n elementów:
lst = lst[:len(lst)-n]
Uwaga: to nie jest operacja w pamięci. Utworziłoby to kopię.
pamiętać, że to faktycznie sprawia, że kopia listy do n-tego elementu, choć zwykle nie będzie miała większego wpływu – jamylak
Oh .. :) Po prostu zanotował: – karthikr
Jak to może być zaakceptowana odpowiedź ?! To nawet nie daje prawidłowego wyniku. – Vincenzooo
Works dla n >= 1
>>> L = [1,2,3, 4, 5]
>>> n=2
>>> del L[-n:]
>>> L
[1, 2, 3]
Ten sam problem dotyczy innych odpowiedzi: nie działa dla n <= 0. (0 usuwa listę, <0 usuwa z przedniej listy, co może być poprawne, ale może nie być). Jeśli możesz poświęcić czas na skopiowanie listy, myślę, że odpowiedź plasterka Luca Citi jest lepsza, w przeciwnym razie potrzebujesz czeku dla n> 0. –
@ Daniella. Nie działa na n <= 0, jednak jest to proste rozwiązanie i może rozwiązać potrzeby wielu przypadków użycia. Pomaga także w kształceniu nowych osób w Pythonie. Każdy może swobodnie korzystać z dowolnego rozwiązania, więc dobrze, że mamy odmianę – jamylak
widzę ten został poproszony długo temu, ale żadna z odpowiedzi uczynił go dla mnie; co jeśli chcemy dostać listę bez ostatnich elementów N, ale zachowujemy oryginalną: po prostu robisz list[:-n]
. Jeśli potrzebujesz obsługi przypadków, w których n
może być równy 0
, robisz 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]
Takie proste.
Jest to jeden z przypadków, w których bycie pythonic
nie działa dla mnie i może dać ukryte błędy lub bałagan. Żadne z powyższych rozwiązań nie działa dla przypadku n = 0. Korzystanie l[:len(l)-n]
prace w ogólnym przypadku:
l=range(4)
for n in [2,1,0]: #test values for numbers of points to cut
print n,l[:len(l)-n]
Jest to przydatne na przykład w zależności do wykończenia brzegów wektorze, w którym chcesz zostawić możliwość, aby nie przeciąć wszystko.
Jak poprawnie mówi Vincenzooo, pythonic lst[:-n]
nie działa, gdy n==0
.
Poniższe działa dla wszystkich n>=0
:
lst = lst[:-n or None]
Lubię to rozwiązanie, ponieważ jest to rodzaj czytelny w języku angielskim też: „powrót kawałek pomijając ostatnie elementy N lub Brak (jeśli żaden musi być pominięte) ".
To rozwiązanie działa z powodu następujących powodów:
x or y
ocenia się x
gdy x
jest logicznie prawdziwe (np gdy nie jest 0
, ""
, False
, None
, ...) i do y
inaczej . Tak -n or None
jest -n
, gdy n!=0
i , gdy n==0
.None
jest równoznaczne z pominięciem wartości, więc lst[:None]
jest takie samo jak lst[:]
(patrz here).To rozwiązanie jest zdecydowanie najbardziej pythonic AND PEP8 friendly. Jest to szczególnie dobre, ponieważ odpowiada za przypadek 0. Jednak, aby odpowiedzieć na pytanie tak, jak jest zadawane, możesz zmienić swoją odpowiedź na zadanie takie jak: "lst = lst [: - n lub None]" –
nie wywołuj swojej listy, 'list'.lub nie będziesz mógł użyć wbudowanej klasy 'list' klasy – jamylak
Daniel, wybierz odpowiednią odpowiedź (Luca Citi) na to pytanie. – Sheljohn