W Pythonie, jak uzyskać ostatni element listy?

2492
Janusz 30 maj 2009, 23:28

10 odpowiedzi

Najlepsza odpowiedź

some_list[-1] jest najkrótszym i najbardziej pytalnym.

W rzeczywistości możesz zrobić znacznie więcej dzięki tej składni. Składnia some_list[-n] dostaje n / do ostatniego elementu. Więc some_list[-1] dostaje ostatni element, some_list[-2] dostaje drugi do ostatniego, itp., Cały droga do some_list[-len(some_list)], co zapewnia pierwszy element.

Możesz także ustawić elementy listy w ten sposób. 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]

Należy pamiętać, że uzyskanie elementu listy według indeksu pojawi się IndexError Jeśli oczekiwany element nie istnieje. Oznacza to, że some_list[-1] podniesie wyjątek, jeśli some_list jest pusty, ponieważ pusta lista nie może mieć ostatniego elementu.

3409
Sasha Chedygov 22 październik 2020, 21:12

Jeśli obiekty str() lub list() mogą być puste, jak więc: astr = '' lub alist = [], a następnie możesz użyć alist[-1:] zamiast {{x5 }} Dla obiektu "identyczność".

Znaczenie tego jest:

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

Jeżeli wykonane wyróżnienie jest to, że zwracanie pustego obiektu listy lub pusty obiekt STR jest bardziej "ostatni element", jak obiekt wyjątkowy.

272
Simon 8 czerwiec 2018, 18:40

Możesz także zrobić:

alist.pop()

To zależy od tego, co chcesz zrobić z listą, ponieważ metoda pop() usunie ostatni element.

110
Cleb 15 lipiec 2016, 13:15

Najprostszym sposobem wyświetlania ostatniego elementu w Pythonie jest

>>> list[-1:] # returns indexed value
    [3]
>>> list[-1]  # returns value
    3

Istnieje wiele innych metod, aby osiągnąć taki cel, ale są one krótkie i słodkie do użycia.

79
Atul Arvind 21 sierpień 2012, 04:53

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'
20
Valentin Podkamennyi 25 wrzesień 2019, 00:43

lst[-1] to najlepsze podejście, ale z ogólnymi iterables, rozważ more_itertools.last:

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'
12
pylang 1 sierpień 2018, 03:08

Inna metoda:

some_list.reverse() 
some_list[0]
10
Georgy 14 czerwiec 2019, 09:10

list[-1] otrzyma ostatni element listy bez zmiany listy. list.pop() otrzyma ostatni element listy, ale będzie mutację / zmienić oryginalną listę. Zwykle nie jest zalecane, zwracanie oryginalnej listy.

Alternatywnie, jeśli z jakiegoś powodu szukasz czegoś mniej Pythonic, możesz użyć list[len(list)-1], zakładając, że lista nie jest pusta.

7
Sondering Narcissist 7 październik 2016, 02:21

Możesz także użyć poniższego kodu, jeśli nie chcesz uzyskać indeksowania, gdy lista jest pusta.

next(reversed(some_list), None)
7
Yavuz Mester 2 czerwiec 2017, 13:23

OK, ale co ze wspólnym w prawie każdym języku Way items[len(items) - 1]? Jest to imo najprostszym sposobem na uzyskanie ostatniego elementu, ponieważ nie wymaga niczego Pythonic wiedzy.

4
Radek Anuszewski 7 październik 2015, 17:22