Ответы:
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
- это была бы красивая строка кода