Как в Python получить последний элемент списка?
Как получить последний элемент списка?
Ответы (18)
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
пуст, потому что в пустом списке не может быть последнего элемента.
some_list.last
- это была бы красивая строчка кода
- person Dmitry P.; 20.01.2020
Если ваши 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 больше похоже на «последний элемент», чем на объект исключения.
if len(my_vector) == 0 or my_vector[-1] != update_val
является работоспособным шаблоном. но это, конечно, не глобальное решение - было бы неплохо иметь синтаксическую форму, в которой результатом было None
- person Mark Mullin; 05.03.2017
Вы также можете:
last_elem = alist.pop()
Это зависит от того, что вы хотите сделать со своим списком, потому что метод pop()
удалит последний элемент.
Самый простой способ отобразить последний элемент в Python -
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
есть много других методов для достижения этой цели, но они короткие и удобные в использовании.
list[-1]
будет ошибкой.
- person anon01; 15.02.2018
Как в 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
Чтобы предотвратить 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'
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'
Другой способ:
some_list.reverse()
some_list[0]
O(n)
, даже если у вас есть возможность сделать это с O(1)
.
- person say_my_name; 08.06.2021
list[-1]
получит последний элемент списка без изменения списка. list.pop()
получит последний элемент списка, но изменит исходный список. Обычно изменять исходный список не рекомендуется.
В качестве альтернативы, если по какой-то причине вы ищете что-то менее питоническое, вы можете использовать list[len(list)-1]
, если список не пуст.
Вы также можете использовать приведенный ниже код, если не хотите получать IndexError, когда список пуст.
next(reversed(some_list), None)
Хорошо, но как насчет общего почти для всех языков items[len(items) - 1]
? Это ИМО самый простой способ получить последний элемент, потому что он не требует каких-либо знаний питоники.
some_list[-1]
, потому что он более логичен и показывает, что он на самом деле делает лучше, чем some_list[-1]
, на мой взгляд.
- person Byron Filer; 05.11.2016
my_test = []
last_item = my_test[len(my_test) - 1]
. Это также вызовет исключение для IndexError
, как и другие ответы. Хотя я считаю, что исключения допустимы и хороши, потому что я знаю, что делать с моим предпочтительным try:...except:...else:...finally:...
шаблоном кодирования на Python.
- person Fr0zenFyr; 14.04.2018
Питонический путь
Итак, давайте рассмотрим, что у нас есть список a = [1,2,3,4]
, в Python List можно манипулировать, чтобы предоставить нам его часть или его элемент, используя следующую команду, можно легко получить последний элемент.
print(a[-1])
Вот решение для вашего запроса.
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.
Выход:
>>> first
>>> last
>>> middle
Чтобы избежать IndexError: list index out of range, вы можете использовать этот фрагмент кода.
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
он вернет строку, когда вы ждете int.
- person raulmd13; 29.03.2021
Вам просто нужно взять индекс и поставить [-1]. Например:
list=[0,1,2]
last_index=list[-1]
print(last_index)
На выходе вы получите 2.
Доступ к последнему элементу из списка в Python:
1: доступ к последнему элементу с отрицательным индексом -1
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data[-1]
'w'
2. Доступ к последнему элементу с помощью метода pop ()
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data.pop()
'w'
Однако метод pop удалит последний элемент из списка.
.pop
является деструктивным (как поясняется другими ответами). Он не только получает последний элемент из списка, но и удаляет его из списка.
- person Wondercricket; 08.06.2021
Если вы сделаете my_list[-1]
, это вернет последний элемент списка. Индексы отрицательной последовательности представляют позиции от конца массива. Отрицательная индексация означает начало с конца, -1 относится к последнему элементу, -2 относится к второму последнему элементу и т. Д.
Не удалось найти ни одного упоминания об этом. Итак, добавление.
Вы также можете попробовать some_list[~0]
.
Это символ тильда