Pobieranie ostatniego elementu listy w Pythonie

W Pythonie, jak uzyskać ostatni element listy?

Author: APerson, 2009-05-30

14 answers

some_list[-1] jest najkrótsza i najbardziej Pythoniczna.

W rzeczywistości, można zrobić znacznie więcej z tej składni. Składnia some_list[-n] pobiera n-ty-ostatni element. Więc some_list[-1] pobiera ostatni element, some_list[-2] pobiera przedostatni, itd., aż do some_list[-len(some_list)], co daje pierwszy element.

Można również 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]
 2290
Author: Sasha Chedygov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-16 17:30:32

Jeśli Twoje str() lub list() obiekty mogą być puste w ten sposób: 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

Gdzie rozróżnia się, że zwracanie pustego obiektu list lub pustego obiektu str jest bardziej "ostatnim elementem" - jak obiekt wyjątku.

 190
Author: DevPlayer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 18:40:54

Możesz również zrobić:

alist.pop()

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

 69
Author: Taurus Olson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-15 13:15:06

Najprostszym sposobem wyświetlenia 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 w użyciu.

 54
Author: Atul Arvind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-21 04:53:04

W Pythonie, jak uzyskać ostatni element listy?

Aby uzyskać ostatni element,

  • bez modyfikowania listy, oraz
  • zakładając, że znasz listę ma ostatni element (tzn. jest nieempty)

Przekazać -1 do zapisu dolnego:

>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'

Wyjaśnienie

Indeksy i plasterki mogą przyjmować ujemne liczby całkowite jako argumenty.

Zmodyfikowałem przykład z dokumentacja aby wskazać, który element w sekwencji odwołuje się do każdego indeksu, w tym przypadku w ciągu "Python", -1 odwołuje 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 przez iterowalne rozpakowywanie

Metoda ta może niepotrzebnie zmaterializować drugą listę w celu uzyskania tylko ostatniego elementu, ale ze względu na kompletność (i ponieważ obsługuje dowolne iterable-nie tylko listy):]}
>>> *head, last = a_list
>>> last
'three'

Nazwa zmiennej, head jest związana z niepotrzebna nowo utworzona lista:

>>> head
['zero', 'one', 'two']
Jeśli nie zamierzasz nic zrobić z tą listą, będzie to bardziej apropos:]}
*_, last = a_list
Nie jest to jednak żaden problem, ponieważ nie jest on w stanie go rozwiązać.]}
last = a_list[-1]

W funkcji

Komentator powiedział:

Szkoda, że Python nie ma funkcji first () I last (), tak jak robi to Lisp... pozbyłoby się wielu niepotrzebnych funkcji lambda.

[[37]}byłoby to dość proste do define:
def last(a_list):
    return a_list[-1]

def first(a_list):
    return a_list[0]

Lub operator.itemgetter:

>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)

W obu przypadkach:

>>> last(a_list)
'three'
>>> first(a_list)
'zero'

Przypadki specjalne

Jeśli robisz coś bardziej skomplikowanego, może okazać się bardziej wydajne, aby uzyskać ostatni element w nieco inny sposób.

Jeśli jesteś nowy w programowaniu, powinieneś unikać tej sekcji, ponieważ łączy ona różne semantycznie części algorytmów. Jeśli zmienisz algorytm w jednym miejscu, może to mieć niezamierzony wpływ na inny linia kodu.

Staram się zapewnić zastrzeżenia i warunki tak całkowicie, Jak mogę, ale mogłem coś przeoczyć. Proszę skomentować, jeśli uważasz, że zostawiam zastrzeżenie.

Krojenie

Wycinek listy zwraca nową listę - więc możemy wycinać od -1 do końca, jeśli chcemy, aby element znajdował się na nowej liście:

>>> a_slice = a_list[-1:]
>>> a_slice
['three']

To ma 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 podnosi IndexError, który musiałby być obsługiwany:

>>> 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 być wykonywane tylko wtedy, gdy potrzebujesz:

  • utworzono nową listę
  • i nowa lista ma być pusta, jeśli poprzednia lista była pusta.

for pętle

Jako cecha Pythona, nie ma wewnętrznego zakresu w pętli for.

Jeśli wykonujesz już pełną iterację nad listą, ostatni element będzie nadal odwoływał się do nazwy zmiennej przypisanej w pętla:

>>> def do_something(arg): pass
>>> for item in a_list:
...     do_something(item)
...     
>>> item
'three'

To nie jest semantycznie ostatnia rzecz na liście. To jest semantycznie ostatnia rzecz, do której nazwa, {28]}, była związana.

>>> 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 powinno być użyte tylko do uzyskania ostatniego elementu, jeśli

  • są już zapętlone, a
  • wiesz, że pętla zakończy się (nie zostanie przerwana lub zamknięta z powodu błędów), w przeciwnym razie wskaże ostatni element, do którego odwołuje się pętla.

Uzyskiwanie i usuwanie go

Możemy również zmutuj 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 domyślnym argumentem, więc list.pop może być używany bez argumentu indeksu):

>>> a_list.pop()
'two'

Rób to tylko wtedy, gdy

  • wiesz, że lista zawiera elementy, lub jesteś przygotowany do obsługi wyjątku, jeśli jest pusty, i
  • zamierzasz usunąć ostatni element z listy, traktując go jak stos.

Są to ważne przypadki użycia, ale niezbyt częste.

Zapisanie reszty rewersu na później:

Nie wiem dlaczego to robisz, ale dla kompletności, ponieważ reversed zwraca iterator (który obsługuje protokół iteratora) można przekazać jego wynik do next:

>>> next(reversed([1,2,3]))
3

Więc to tak, jakby robić to na odwrót:

>>> next(iter([1,2,3]))
1

Ale nie mogę wymyślić dobrego powodu, aby to zrobić, chyba że będziesz potrzebował reszty odwrotnej iterator później, który prawdopodobnie wyglądałby bardziej tak:

reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)

use_later = list(reverse_iterator)

A teraz:

>>> use_later
[2, 1]
>>> last_element
3
 23
Author: Aaron Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 03:41:25
mylist = [ 1 , 2 , 3 , 4 , 5]

#------------------------------------
# Method-1 : Last index
#------------------------------------

print(mylist[-1])


#------------------------------------
# Method-2 : Using len 
#------------------------------------

print(mylist[len(mylist) - 1])


#------------------------------------
# Method-3 : Using pop, pop will remove the last 
#            element from the list.
#------------------------------------

print(mylist.pop())
 7
Author: Fuji Clado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 09:06:39

Jeśli chcesz po prostu uzyskać ostatnią wartość listy, powinieneś użyć :

your_list[-1]

Ale jeśli chcesz uzyskać wartość, a także usunąć z listy, możesz użyć :

your_list.pop()

Albo: możesz też pop z indeksem...

your_list.pop(-1)
 5
Author: a_m_dev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 21:16:09

Ok, ale co z powszechnością w prawie każdym języku items[len(items) - 1]? Jest to IMO najprostszy sposób na uzyskanie ostatniego elementu, ponieważ nie wymaga on niczego wiedzy.

 4
Author: Radek Anuszewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-07 17:22:04

Some_list = [1, 2, 3]

Metoda 1:

some_list[-1]

Metoda 2:

**some_list.reverse()** 

**some_list[0]**

Metoda 3:

some_list.pop() 
 4
Author: Sanjay Pradeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-10 12:32:06

Data: 2017-12-06

alist.pop()

Robię wyczerpujący arkusz cheatsheet wszystkich 11 metod listy w celach informacyjnych.

{'list_methods': {'Add': {'extend', 'append', 'insert'},
                  'Entire': {'clear', 'copy'},
                  'Search': {'count', 'index'},
                  'Sort': {'reverse', 'sort'},
                  'Subtract': {'remove', 'pop'}}}
 3
Author: JawSaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 12:28:57

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.

 2
Author: Sondering Narcissist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-07 02:21:23

Możesz również użyć poniższego kodu, jeśli nie chcesz uzyskać IndexError, gdy lista jest pusta.

next(reversed(some_list), None)
 0
Author: Yavuz Mester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 13:23:40

lst[-1] jest najlepszym podejściem, ale z ogólnymi iteracjami, 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'
 0
Author: pylang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-01 03:08:19

Lista Pythona obsługuje indeksy ujemne.

a = [1, 2, 3]

a[-1] # gives the last elements with negative indexes

Lub

a[len(a) - 1] # gives the last elements len function

 0
Author: Vishvajit Pathak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 17:20:43