Jak w Pythonie uzyskać ostatni element listy?
Jak zdobyć ostatni element listy?
Odpowiedzi (18)
some_list[-1]
jest najkrótszym i najbardziej Pythonicznym.
W rzeczywistości dzięki tej składni możesz zrobić znacznie więcej. Składnia some_list[-n]
pobiera element od n-tego do ostatniego. Zatem some_list[-1]
pobiera ostatni element, some_list[-2]
pobiera przedostatni element itd. aż do some_list[-len(some_list)]
, co daje pierwszy element.
W ten sposób możesz także 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]
Pamiętaj, że pobranie elementu listy według indeksu spowoduje wyświetlenie 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
- byłaby to piękna linia kodu
- person Dmitry P.; 20.01.2020
Jeśli Twoje obiekty str()
lub list()
mogą okazać się puste: astr = ''
lub alist = []
, możesz użyć alist[-1:]
zamiast alist[-1]
dla obiektu „identyczność”.
Znaczenie tego jest następujące:
alist = []
alist[-1] # will generate an IndexError exception whereas
alist[-1:] # will return an empty list
astr = ''
astr[-1] # will generate an IndexError exception whereas
astr[-1:] # will return an empty str
Rozróżnia się, że zwrócenie pustego obiektu listy lub pustego obiektu str jest bardziej „ostatnim elementem” niż obiektem wyjątku.
if len(my_vector) == 0 or my_vector[-1] != update_val
jest wykonalnym wzorcem. ale z pewnością nie jest to rozwiązanie globalne - byłoby miło mieć formę składni, w której wynikiem byłoby None
- person Mark Mullin; 05.03.2017
Możesz także zrobić:
last_elem = alist.pop()
Zależy to od tego, co chcesz zrobić ze swoją listą, ponieważ metoda pop()
usunie ostatni element.
Najprostszym sposobem wyświetlenia ostatniego elementu w Pythonie jest
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
istnieje wiele innych metod osiągnięcia takiego celu, ale są one krótkie i łatwe w użyciu.
list[-1]
spowoduje błąd.
- person anon01; 15.02.2018
Jak w Pythonie uzyskać ostatni element listy?
Aby zdobyć ostatni element,
- bez modyfikowania listy oraz
- zakładając, że wiesz, że lista zawiera ostatni element (tj. jest niepusta)
przekazać -1
do notacji z indeksem dolnym:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
Wyjaśnienie
Indeksy i wycinki mogą przyjmować jako argumenty ujemne liczby całkowite.
Zmodyfikowałem przykład z dokumentacji, aby wskazać, który element w sekwencji każdy indeks odniesienia, w tym przypadku, w ciągu "Python"
, -1
odwołują się do ostatniego elementu, znaku, 'n'
:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'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 dowolną iterowalność - nie tylko listy):
>>> *head, last = a_list
>>> last
'three'
Nazwa zmiennej head jest powiązana z niepotrzebną nowo utworzoną listą:
>>> head
['zero', 'one', 'two']
Jeśli nie zamierzasz nic robić z tą listą, bardziej pasowałoby to:
*_, last = a_list
Lub, naprawdę, jeśli wiesz, że to lista (lub przynajmniej akceptuje notację z indeksem dolnym):
last = a_list[-1]
W funkcji
Komentator powiedział:
Chciałbym, żeby Python miał funkcję First() i Last(), tak jak Lisp... pozbyłby się wielu niepotrzebnych funkcji lambda.
Zdefiniowanie ich byłoby dość proste:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
Lub użyj operator.itemgetter
:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
W obu przypadkach:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
Specjalne przypadki
Jeśli robisz coś bardziej skomplikowanego, bardziej wydajne może być uzyskanie ostatniego elementu w nieco inny sposób.
Jeśli dopiero zaczynasz programować, powinieneś ominąć tę sekcję, ponieważ łączy ona semantycznie różne części algorytmów. Jeśli zmienisz algorytm w jednym miejscu, może to mieć niezamierzony wpływ na inną linię kodu.
Staram się podać zastrzeżenia i warunki tak szczegółowo, jak to możliwe, ale mogłem coś przeoczyć. Proszę o komentarz, jeśli uważasz, że pomijam zastrzeżenie.
Krajanie na plastry
Wycinek listy zwraca nową listę, więc możemy wyciąć od -1 do końca, jeśli chcemy, aby element znalazł się na nowej liście:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
Ma to tę zaletę, że nie zawodzi, jeśli lista jest pusta:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
Podczas gdy próba dostępu przez indeks wywołuje IndexError
, który należy obsłużyć:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Ale znowu, krojenie w tym celu powinno odbywać się tylko wtedy, gdy potrzebujesz:
- utworzono nową listę
- a nowa lista będzie pusta, jeśli poprzednia lista była pusta.
for
pętli
Cechą Pythona jest to, że w pętli for
nie ma wewnętrznego zakresu.
Jeśli wykonujesz już pełną iterację na liście, do ostatniego elementu nadal będzie odwoływała się nazwa zmiennej przypisana w pętli:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
To nie jest semantycznie ostatnia rzecz na liście. Jest to semantycznie ostatnia rzecz, z którą związana była nazwa item
.
>>> def do_something(arg): raise Exception
>>> for item in a_list:
... do_something(item)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'
Dlatego należy tego używać tylko do uzyskania ostatniego elementu, jeśli ty
- już zapętlają się i
- wiesz, że pętla się zakończy (nie zostanie przerwana ani nie zakończy się z powodu błędów), w przeciwnym razie wskaże ostatni element, do którego odwołuje się pętla.
Pobieranie i usuwanie
Możemy również zmutować naszą oryginalną listę, usuwając i zwracając ostatni element:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
Ale teraz oryginalna lista została zmodyfikowana.
(-1
jest w rzeczywistości argumentem domyślnym, więc list.pop
można użyć bez argumentu indeksu):
>>> a_list.pop()
'two'
Zrób to tylko wtedy, gdy
- wiesz, że lista zawiera elementy lub jesteś przygotowany na obsługę wyjątku, jeśli jest pusty, oraz
- zamierzasz usunąć ostatni element z listy, traktując go jak stos.
Są to prawidłowe przypadki użycia, ale niezbyt częste.
Resztę rewersu zostawiam na później:
Nie wiem, dlaczego miałbyś to zrobić, ale dla kompletności, ponieważ reversed
zwraca iterator (który obsługuje protokół iteratora), możesz przekazać jego wynik do next
:
>>> next(reversed([1,2,3]))
3
To jakby zrobić odwrotność tego:
>>> next(iter([1,2,3]))
1
Ale nie mogę wymyślić dobrego powodu, aby to zrobić, chyba że będziesz potrzebować później reszty iteratora odwrotnego, który prawdopodobnie wyglądałby bardziej tak:
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
i teraz:
>>> use_later
[2, 1]
>>> last_element
3
Aby zapobiec IndexError: list index out of range
, użyj tej składni:
mylist = [1, 2, 3, 4]
# With None as default value:
value = mylist and mylist[-1]
# With specified default value (option 1):
value = mylist and mylist[-1] or 'default'
# With specified default value (option 2):
value = mylist[-1] if mylist else 'default'
lst[-1]
to najlepsze podejście, ale w przypadku ogólnych iteracji rozważ more_itertools.last
a>:
Kod
import more_itertools as mit
mit.last([0, 1, 2, 3])
# 3
mit.last(iter([1, 2, 3]))
# 3
mit.last([], "some default")
# 'some default'
Inna metoda:
some_list.reverse()
some_list[0]
O(n)
, nawet jeśli masz taką możliwość w O(1)
.
- person say_my_name; 08.06.2021
list[-1]
pobierze ostatni element listy bez zmiany listy. list.pop()
pobierze ostatni element listy, ale zmutuje/zmieni oryginalną listę. Zwykle nie zaleca się mutowania oryginalnej listy.
Alternatywnie, jeśli z jakiegoś powodu szukasz czegoś mniej Pythonicznego, możesz użyć list[len(list)-1]
, zakładając, że lista nie jest pusta.
Możesz także użyć poniższego kodu, jeśli nie chcesz uzyskać IndexError, gdy lista jest pusta.
next(reversed(some_list), None)
OK, ale co z powszechnym w prawie każdym języku items[len(items) - 1]
? Jest to IMO najłatwiejszy sposób na uzyskanie ostatniego elementu, ponieważ nie wymaga żadnej wiedzy pythonicznej.
some_list[-1]
, ponieważ jest bardziej logiczne i moim zdaniem pokazuje, co faktycznie robi lepiej niż some_list[-1]
.
- person Byron Filer; 05.11.2016
my_test = []
last_item = my_test[len(my_test) - 1]
. Spowoduje to również zgłoszenie wyjątku dla IndexError
, podobnie jak inne odpowiedzi. Chociaż uważam, że wyjątki są uzasadnione i dobre, ponieważ wiem, co zrobić z moim preferowanym try:...except:...else:...finally:...
wzorcem kodowania w Pythonie.
- person Fr0zenFyr; 14.04.2018
Sposób Pythoniczny
Rozważmy więc, że mamy listę a = [1,2,3,4]
, w Pythonie można manipulować listą, aby dać nam jej część lub element, za pomocą następującego polecenia można łatwo uzyskać ostatni element.
print(a[-1])
Oto rozwiązanie Twojego zapytania.
a=["first","middle","last"] # A sample list
print(a[0]) #prints the first item in the list because the index of the list always starts from 0.
print(a[-1]) #prints the last item in the list.
print(a[-2]) #prints the last second item in the list.
Wyjście:
>>> first
>>> last
>>> middle
Aby uniknąć IndexError: lista indeksu poza zakresem, możesz użyć tego fragmentu kodu.
list_values = [12, 112, 443]
def getLastElement(lst):
if len(lst) == 0:
return 0
else:
return lst[-1]
print(getLastElement(list_values))
len(lst) == 0
zwróci ciąg znaków, gdy czekasz na liczbę typu int.
- person raulmd13; 29.03.2021
Będziesz musiał po prostu wziąć i umieścić indeks [-1]. Na przykład:
list=[0,1,2]
last_index=list[-1]
print(last_index)
Otrzymasz 2 jako wynik.
Dostęp do ostatniego elementu z listy w Pythonie:
1: Uzyskaj dostęp do ostatniego elementu z ujemnym indeksowaniem -1
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data[-1]
'w'
2. Uzyskaj dostęp do ostatniego elementu metodą pop()
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data.pop()
'w'
Jednak metoda pop usunie ostatni element z listy.
.pop
jest destrukcyjny (jak wyjaśniono w innych odpowiedziach). Nie tylko pobiera ostatnią pozycję z listy, ale także ją usuwa z listy
- person Wondercricket; 08.06.2021
Jeśli to zrobisz my_list[-1]
, zwróci ostatni element listy. Indeksy sekwencji ujemnej reprezentują pozycje od końca tablicy. Indeksowanie ujemne oznacza rozpoczynanie od końca, -1 odnosi się do ostatniego elementu, -2 odnosi się do przedostatniego elementu itd.
Nie udało się znaleźć żadnej odpowiedzi, która by o tym wspominała. Więc dodaję.
Możesz także spróbować some_list[~0]
.
To jest symbol tyldy