Jak uzyskać w Pythonie ostatni element listy?
2061
some_list[-1]
jest najkrótszym i najbardziej pytonicznym.
W rzeczywistości możesz zrobić znacznie więcej dzięki tej składni. some_list[-n]
Składnia pobiera element uruchamiany n-tym ostatnim. Więc some_list[-1]
dostaje ostatni element, some_list[-2]
dostaje od drugiego do ostatniego itd., Aż do some_list[-len(some_list)]
, co daje pierwszy element.
W ten sposób można również ustawić elementy listy. Na przykład:
>>> some_list = [1, 2, 3]
>>> some_list[-1] = 5 # Set the last element
>>> some_list[-2] = 3 # Set the second to last element
>>> some_list
[1, 3, 5]
Zauważ, że uzyskanie elementu listy według indeksu spowoduje podniesienie, IndexError
jeśli oczekiwany element nie istnieje. Oznacza to, że some_list[-1]
zgłosi wyjątek, jeśli some_list
jest pusty, ponieważ pusta lista nie może zawierać ostatniego elementu.
some_list.last
- to byłaby piękna linia koduJeśli twoje
str()
lublist()
obiekty mogą być puste jako takie:astr = ''
lubalist = []
, wtedy możesz chcieć użyćalist[-1:]
zamiastalist[-1]
dla „identyczności” obiektu.Znaczenie tego jest następujące:
Rozróżnia się tutaj to, że zwracanie pustego obiektu listy lub pustego obiektu str jest bardziej „ostatnim elementem” - bardziej niż obiektem wyjątku.
źródło
if len(my_vector) == 0 or my_vector[-1] != update_val
jest wykonalnym wzorcem. ale z pewnością nie jest to rozwiązanie globalne - fajnie byłoby mieć formę składni, w której żaden nie był wynikiemxs[-1] if xs else None
Możesz także:
To zależy od tego, co chcesz zrobić z listą, ponieważ
pop()
metoda usunie ostatni element.źródło
Najprostszym sposobem wyświetlenia ostatniego elementu w pythonie jest
istnieje wiele innych metod osiągnięcia tego celu, ale są one krótkie i słodkie w użyciu.
źródło
list[-1]
wystąpi błąd.a[-1:][0]
w ogóle ? On ia[-1]
tak zapewnia . Wyjaśnienie proszę?Aby zdobyć ostatni element,
przejdź
-1
do notacji indeksu dolnego:Wyjaśnienie
Indeksy i wycinki mogą przyjmować jako argumenty ujemne liczby całkowite.
Mam zmodyfikowany przykład z dokumentacji , aby wskazać, który element w sekwencji każdego indeksu odniesienia, w tym przypadku, w ciągu
"Python"
,-1
odwołuje się do ostatniego elementu, postać,'n'
:Przypisanie poprzez iterowalne rozpakowywanie
Ta metoda może niepotrzebnie zmaterializować drugą listę w celu uzyskania ostatniego elementu, ale ze względu na kompletność (i ponieważ obsługuje każdą iterowalną - nie tylko listy):
Nazwa zmiennej head jest powiązana z niepotrzebną nowo utworzoną listą:
Jeśli nie zamierzasz nic robić z tą listą, będzie to więcej apropos:
Lub, naprawdę, jeśli wiesz, że jest to lista (lub przynajmniej akceptuje notację indeksu dolnego):
W funkcji
Komentator powiedział:
Można by je dość łatwo zdefiniować:
Lub użyj
operator.itemgetter
:W obu przypadkach:
Przypadki specjalne
Jeśli robisz coś bardziej skomplikowanego, może okazać się, że bardziej wydajne jest uzyskanie ostatniego elementu na nieco inne sposoby.
Jeśli dopiero zaczynasz programować, powinieneś unikać tej sekcji, ponieważ łączy ona semantycznie różne części algorytmów razem. Zmiana algorytmu w jednym miejscu może mieć niezamierzony wpływ na inną linię kodu.
Staram się zapewnić zastrzeżenia i warunki tak dokładnie, jak potrafię, ale być może coś mi umknęło. Proszę o komentarz, jeśli uważasz, że zostawiam zastrzeżenie.
Krajanie na plastry
Fragment listy zwraca nową listę - dzięki czemu możemy wyciąć od -1 do końca, jeśli chcemy, aby element był na nowej liście:
Ma to tę zaletę, że nie zawiedzie, jeśli lista jest pusta:
Podczas gdy próba dostępu za pomocą indeksu rodzi problem, z
IndexError
którym należałoby się uporać:Ale ponownie, krojenie w tym celu powinno być wykonane tylko wtedy, gdy potrzebujesz:
for
pętleW Pythonie nie ma wewnętrznego zakresu w
for
pętli.Jeśli wykonujesz już pełną iterację na liście, do ostatniego elementu nadal będzie odwoływać się nazwa zmiennej przypisana w pętli:
To nie jest semantycznie ostatnia rzecz na liście. Jest to semantycznie ostatnia rzecz, z którą nazwa
item
była związana.Dlatego należy tego użyć tylko do uzyskania ostatniego elementu
Pobieranie i usuwanie
Możemy również mutować naszą oryginalną listę, usuwając i zwracając ostatni element:
Ale teraz oryginalna lista została zmodyfikowana.
(w
-1
rzeczywistości jest domyślnym argumentem, więclist.pop
można go używać bez argumentu indeksu):Zrób to tylko, jeśli
Są to ważne przypadki użycia, ale niezbyt częste.
Zapisywanie reszty na później:
Nie wiem, dlaczego to zrobiłeś, ale dla kompletności, ponieważ
reversed
zwraca iterator (który obsługuje protokół iteratora), możesz przekazać jego wynik donext
:To jest jak odwrócenie tego:
Ale nie mogę wymyślić dobrego powodu, aby to zrobić, chyba że później będziesz potrzebować reszty odwrotnego iteratora, który prawdopodobnie wyglądałby bardziej tak:
i teraz:
źródło
Aby temu zapobiec
IndexError: list index out of range
, użyj tej składni:źródło
Inna metoda:
źródło
lst[-1]
jest najlepszym podejściem, ale przy ogólnych iteracjach rozważmore_itertools.last
:Kod
źródło
list[-1]
pobierze ostatni element listy bez zmiany listy.list.pop()
pobierze ostatni element listy, ale zmutuje / zmieni oryginalną listę. Zwykle mutowanie oryginalnej listy nie jest zalecane.Alternatywnie, jeśli z jakiegoś powodu szukasz czegoś mniej pytonicznego, możesz użyć
list[len(list)-1]
, zakładając, że lista nie jest pusta.źródło
Możesz również użyć poniższego kodu, jeśli nie chcesz otrzymywać IndexError, gdy lista jest pusta.
źródło
Ok, ale co z pospolitym w prawie każdym języku
items[len(items) - 1]
? Jest to IMO najłatwiejszy sposób na uzyskanie ostatniego elementu, ponieważ nie wymaga on żadnej wiedzy pythońskiej .źródło
some_list[-1]
podejście, ponieważ jest bardziej logiczne i pokazuje, co tak naprawdę robi lepiej niżsome_list[-1]
moim zdaniem.