Как в Python получить последний элемент списка?
Вопрос
Как получить последний элемент списка?
Ответы
Ответ 1 · рейтинг 3594 · Sasha Chedygov
some_list[-1] - самый короткий и самый питонический.
Фактически, с этим синтаксисом можно сделать гораздо больше. Синтаксис some_list[-n] получает предпоследний элемент. Итак, 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 пуст, потому что в пустом списке не может быть последнего элемента.
Ответ 2 · рейтинг 291 · DevPlayer
Если ваши str() или list() объекты могут оказаться пустыми: astr = '' или alist = [], тогда вы можете захотеть использовать alist[-1:] вместо alist[-1] для "сходства" объекта.
Значение этого:
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 больше похоже на "последний элемент", чем на объект исключения.
Ответ 3 · рейтинг 120 · Taurus Olson
Вы также можете:
last_elem = alist.pop()
Это зависит от того, что вы хотите сделать со своим списком, потому что метод pop() удалит последний элемент.
Ответ 4 · рейтинг 88 · Atul Arvind
Самый простой способ отобразить последний элемент в Python -
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
есть много других методов для достижения этой цели, но они короткие и удобные в использовании.
Ответ 5 · рейтинг 73 · Aaron Hall
Как в Python получить последний элемент списка?
Чтобы получить последний элемент,
- без изменения списка, и
- предполагая, что вы знаете, что список имеет последний элемент (т.е. он непустой)
передайте -1 в индексную запись:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
Объяснение
Индексы и срезы могут принимать отрицательные целые числа в качестве аргументов.
Я изменил пример из документации, чтобы указать, какой элемент в последовательности каждый индекс ссылки, в данном случае в строке "Python", -1 ссылаются на последний элемент, символ, 'n':
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
Присвоение через повторяющуюся распаковку
Этот метод может излишне материализовать второй список только для получения последнего элемента, но для полноты (и поскольку он поддерживает любую итерацию, а не только списки):
>>> *head, last = a_list
>>> last
'three'
Имя переменной head привязывается к ненужному вновь созданному списку:
>>> head
['zero', 'one', 'two']
Если вы не собираетесь ничего делать с этим списком, это будет более уместно:
*_, last = a_list
Или, действительно, если вы знаете, что это список (или, по крайней мере, принимает индексную нотацию):
last = a_list[-1]
В функции
Комментатор сказал:
Я бы хотел, чтобы у Python была функция для first () и last (), как у Lisp ... это избавило бы от множества ненужных лямбда-функций.
Их было бы довольно просто определить:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
Или используйте operator.itemgetter:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
В любом случае:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
Особые случаи
Если вы делаете что-то более сложное, вам может показаться более эффективным получение последнего элемента немного другими способами.
Если вы новичок в программировании, вам следует избегать этого раздела, потому что он объединяет вместе семантически разные части алгоритмов. Если вы измените свой алгоритм в одном месте, это может оказать непреднамеренное влияние на другую строку кода.
Я стараюсь изложить предостережения и условия как можно более полно, но, возможно, я что-то упустил. Прокомментируйте, если вы думаете, что я оставляю оговорку.
Нарезка
Срез списка возвращает новый список - поэтому мы можем разрезать от -1 до конца, если нам нужно, чтобы элемент был в новом списке:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
Это дает положительный эффект, если список пуст:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
В то время как при попытке доступа по индексу возникает IndexError, который необходимо обработать:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Но опять же, нарезку для этой цели следует производить только в том случае, если вам нужно:
- новый список создан
- и новый список должен быть пустым, если предыдущий список был пуст.
for петель
Как особенность Python, в цикле for нет внутренней области видимости.
Если вы уже выполняете полную итерацию по списку, на последний элемент все равно будет ссылаться имя переменной, присвоенное в цикле:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
Семантически это не последний пункт в списке. Это семантически последнее, к чему было привязано имя 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'
Таким образом, это следует использовать только для получения последнего элемента, если вы
- уже зацикливаются, и
- вы знаете, что цикл завершится (не прервется или не завершится из-за ошибок), иначе он будет указывать на последний элемент, на который ссылается цикл.
Получение и удаление
Мы также можем изменить наш исходный список, удалив и вернув последний элемент:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
Но теперь исходный список изменен.
(-1 фактически является аргументом по умолчанию, поэтому list.pop можно использовать без аргумента индекса):
>>> a_list.pop()
'two'
Только сделай это, если
- вы знаете, что в списке есть элементы, или готовы обработать исключение, если оно пусто, и
- вы намерены удалить последний элемент из списка, рассматривая его как стек.
Это допустимые варианты использования, но не очень распространенные.
Сохраним остальное в обратном порядке на потом
Я не знаю, зачем вы это сделали, но для полноты картины, поскольку reversed возвращает итератор (который поддерживает протокол итератора), вы можете передать его результат в next:
>>> next(reversed([1,2,3]))
3
Это похоже на обратное:
>>> next(iter([1,2,3]))
1
Но я не могу придумать веской причины для этого, если только вам не понадобится остальная часть обратного итератора позже, которая, вероятно, будет выглядеть примерно так:
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
и сейчас:
>>> use_later
[2, 1]
>>> last_element
3
Ответ 6 · рейтинг 23 · Valentin Podkamennyi
Чтобы предотвратить 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'
Ответ 7 · рейтинг 12 · pylang
lst[-1] - лучший подход, но с общими итерациями рассмотрите _2 _ а>:
Код
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'
Ответ 8 · рейтинг 11 · Sanjay Pradeep
Другой способ:
some_list.reverse()
some_list[0]
Ответ 9 · рейтинг 8 · Sondering Narcissist
list[-1] получит последний элемент списка без изменения списка. list.pop() получит последний элемент списка, но изменит исходный список. Обычно изменять исходный список не рекомендуется.
В качестве альтернативы, если по какой-то причине вы ищете что-то менее питоническое, вы можете использовать list[len(list)-1], если список не пуст.
Ответ 10 · рейтинг 8 · Yavuz Mester
Вы также можете использовать приведенный ниже код, если не хотите получать IndexError, когда список пуст.
next(reversed(some_list), None)
Ответ 11 · рейтинг 4 · Radek Anuszewski
Хорошо, но как насчет общего почти для всех языков items[len(items) - 1]? Это ИМО самый простой способ получить последний элемент, потому что он не требует каких-либо знаний питоники.
Ответ 12 · рейтинг 3 · Muneeb Ahmad Khurram
Питонический путь
Итак, давайте рассмотрим, что у нас есть список a = [1,2,3,4], в Python List можно манипулировать, чтобы предоставить нам его часть или его элемент, используя следующую команду, можно легко получить последний элемент.
print(a[-1])
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Ускорьте сбор данных с помощью многопоточности в Python
- Основы Pandas для анализа данных [часть 1]
- Введение в ООП на примере Python🖥️
- Обнаружение ключевых точек лица
- Подход к синхронизации одного списка SharePoint с одним или несколькими списками SharePoint
- WordPress: как отображать только записи из определенной категории?