В Python, как вы получаете последний элемент списка?

2452
Janusz 30 Май 2009 в 23:28

10 ответов

Лучший ответ

some_list[-1] самый короткий и самый питонический.

На самом деле, вы можете сделать намного больше с этим синтаксисом. Синтаксис some_list[-n] получает элемент nth-to-last. Итак, some_list[-1] получает последний элемент, some_list[-2] получает второй до последнего и т. Д. Вплоть до some_list[-len(some_list)], который дает вам первый элемент.

Вы также можете установить элементы списка таким образом. Например:

>>> 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]

Обратите внимание, что получение элемента списка по индексу вызовет IndexError если ожидаемый элемент не существует. Это означает, что some_list[-1] вызовет исключение, если some_list пуст, потому что пустой список не может иметь последний элемент.

2959
Sasha Chedygov 20 Ноя 2018 в 23:14

Чтобы предотвратить IndexError: list index out of range, используйте этот синтаксис:

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'
12
Valentin 25 Сен 2019 в 00:43

Вы также можете сделать:

alist.pop()

Это зависит от того, что вы хотите сделать со своим списком, потому что метод pop() удалит последний элемент.

92
Cleb 15 Июл 2016 в 13:15

Вы также можете использовать код ниже, если вы не хотите получать IndexError, когда список пуст.

next(reversed(some_list), None)
6
Yavuz Mester 2 Июн 2017 в 13:23

list[-1] извлечет последний элемент списка без изменения списка. list.pop() извлечет последний элемент списка, но он будет видоизменять / изменять исходный список. Как правило, изменение оригинального списка не рекомендуется.

В качестве альтернативы, если по какой-то причине вы ищете что-то менее питоническое, вы можете использовать list[len(list)-1], предполагая, что список не пуст.

6
Sondering Narcissist 7 Окт 2016 в 02:21

lst[-1] - лучший подход, но с общими итерациями рассмотрим more_itertools.last :

< Сильный > Код

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'
10
pylang 1 Авг 2018 в 03:08

Другой метод:

some_list.reverse() 
some_list[0]
10
Georgy 14 Июн 2019 в 09:10

Самый простой способ отобразить последний элемент в Python

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

Есть много других методов для достижения такой цели, но они короткие и приятные в использовании.

65
Atul Arvind 21 Авг 2012 в 04:53

Хорошо, но как насчет общего почти во всех языках items[len(items) - 1]? Это IMO самый простой способ получить последний элемент, потому что он не требует никаких pythonic знаний.

4
Radek Anuszewski 7 Окт 2015 в 17:22

Если ваши str() или list() объекты могут оказаться пустыми, то есть: astr = '' или alist = [], тогда вы можете использовать alist[-1:] вместо {{X5 }} для объекта "одинаковость".

Значимость этого такова:

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

При этом делается различие в том, что возврат пустого объекта списка или пустого объекта str является более «последним элементом», чем объект исключения.

243
Simon 8 Июн 2018 в 18:40