Ответы:
some_list[-1] самый короткий и самый Pythonic.
На самом деле, вы можете сделать гораздо больше с этим синтаксисом. 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оно пустое, потому что пустой список не может иметь последний элемент.
Если ваши 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
xs[-1] if xs else None
Вы также можете сделать:
alist.pop()
Это зависит от того, что вы хотите сделать со своим списком, потому что pop()метод удалит последний элемент.
Самый простой способ отобразить последний элемент в Python
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
Есть много других методов для достижения такой цели, но они короткие и приятные в использовании.
list[-1]будет работать, пока не произойдет ошибка.
a[-1:][0] вообще ? Он обеспечивает в a[-1]любом случае тоже. Пояснения пожалуйста?
В 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'
Другой метод:
some_list.reverse()
some_list[0]
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'
list[-1]извлечет последний элемент списка без изменения списка.
list.pop()извлечет последний элемент списка, но он будет изменять / изменять исходный список. Как правило, изменение оригинального списка не рекомендуется.
В качестве альтернативы, если по какой-то причине вы ищете что-то менее питоническое, вы можете использовать его list[len(list)-1], предполагая, что список не пуст.
Вы также можете использовать код ниже, если вы не хотите получать IndexError, когда список пуст.
next(reversed(some_list), None)
Хорошо, но как насчет общего почти во всех языковых отношениях items[len(items) - 1]? Это ИМО самый простой способ получить последний элемент, потому что он не требует ничего питонического знания.
some_list[-1]подход, потому что он более логичен и показывает, что он на самом деле делает лучше, чем, some_list[-1]на мой взгляд.
some_list.last- это была бы красивая строка кода