В Python, как вы получаете последний элемент списка?
2067
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
оно пустое, потому что пустой список не может иметь последний элемент.
some_list.last
- это была бы красивая строка кодаЕсли ваши
str()
илиlist()
объекты могут оказаться пустыми, то есть так:astr = ''
илиalist = []
, тогда вы можете использоватьalist[-1:]
вместоalist[-1]
объекта "одинаковость".Значимость этого такова:
Здесь делается различие в том, что возвращение пустого объекта списка или пустого объекта str является более «последним элементом», чем объект исключения.
источник
if len(my_vector) == 0 or my_vector[-1] != update_val
является работоспособным шаблоном. но это, безусловно, не глобальное решение - было бы неплохо иметь синтаксическую форму, в которой результатом был Nonexs[-1] if xs else None
Вы также можете сделать:
Это зависит от того, что вы хотите сделать со своим списком, потому что
pop()
метод удалит последний элемент.источник
Самый простой способ отобразить последний элемент в Python
Есть много других методов для достижения такой цели, но они короткие и приятные в использовании.
источник
list[-1]
будет работать, пока не произойдет ошибка.a[-1:][0]
вообще ? Он обеспечивает вa[-1]
любом случае тоже. Пояснения пожалуйста?Чтобы просто получить последний элемент,
перейти
-1
к нижнему обозначению:объяснение
Индексы и фрагменты могут принимать отрицательные целые числа в качестве аргументов.
Я изменил пример из документации , чтобы указать , какой элемент в последовательности ссылки каждого индекс в этом случае, в строке
"Python"
,-1
ссылающиеся на последний элемент, символ,'n'
:Назначение через повторяемую распаковку
Этот метод может излишне материализовать второй список только для того, чтобы получить последний элемент, но ради полноты (и поскольку он поддерживает любые итерируемые, а не только списки):
Имя переменной head связано с ненужным вновь созданным списком:
Если вы намереваетесь ничего не делать с этим списком, это будет более уместно:
Или, на самом деле, если вы знаете, что это список (или, по крайней мере, принимаете индексную запись):
В функции
Комментатор сказал:
Это было бы довольно просто определить:
Или используйте
operator.itemgetter
:В любом случае:
Особые случаи
Если вы делаете что-то более сложное, вам может показаться более производительным, чтобы получить последний элемент немного другими способами.
Если вы новичок в программировании, вам следует избегать этого раздела, потому что он иначе связывает семантически разные части алгоритмов вместе. Если вы измените свой алгоритм в одном месте, это может оказать непреднамеренное влияние на другую строку кода.
Я стараюсь предоставить предостережения и условия как можно полнее, но я, возможно, что-то упустил. Пожалуйста, прокомментируйте, если вы думаете, что я оставляю оговорку.
нарезка
Срез списка возвращает новый список - так что мы можем разрезать от -1 до конца, если мы хотим, чтобы элемент был в новом списке:
Преимущество в том, чтобы не потерпеть неудачу, если список пуст:
Принимая во внимание, что при попытке доступа по индексу возникает запрос,
IndexError
который необходимо обработать:Но опять же, нарезка для этой цели должна быть сделана, только если вам нужно:
for
петлиКак особенность Python, в
for
цикле нет внутренней области видимости .Если вы уже выполняете полную итерацию по списку, на последний элемент все равно будет ссылаться имя переменной, назначенное в цикле:
Это не семантически последняя вещь в списке. Это семантически последняя вещь, с которой
item
было связано имя.Таким образом, это должно использоваться только для получения последнего элемента, если вы
Получение и удаление
Мы также можем изменить наш оригинальный список, удалив и вернув последний элемент:
Но теперь оригинальный список изменен.
(
-1
фактически является аргументом по умолчанию, поэтомуlist.pop
может использоваться без аргумента индекса):Делайте это только если
Это допустимые варианты использования, но не очень распространенные.
Сохранение остатка обратного на потом:
Я не знаю, почему вы это сделаете, но для полноты, поскольку
reversed
возвращает итератор (который поддерживает протокол итератора), вы можете передать его результатnext
:Так что это похоже на обратное:
Но я не могу придумать вескую причину для этого, если позже вам не понадобится остальная часть обратного итератора, который, вероятно, будет выглядеть примерно так:
и сейчас:
источник
Чтобы предотвратить
IndexError: list index out of range
, используйте этот синтаксис:источник
Другой метод:
источник
lst[-1]
это лучший подход, но с общими итерациями, рассмотримmore_itertools.last
:Код
источник
list[-1]
извлечет последний элемент списка без изменения списка.list.pop()
извлечет последний элемент списка, но он будет изменять / изменять исходный список. Как правило, изменение оригинального списка не рекомендуется.В качестве альтернативы, если по какой-то причине вы ищете что-то менее питоническое, вы можете использовать его
list[len(list)-1]
, предполагая, что список не пуст.источник
Вы также можете использовать код ниже, если вы не хотите получать IndexError, когда список пуст.
источник
Хорошо, но как насчет общего почти во всех языковых отношениях
items[len(items) - 1]
? Это ИМО самый простой способ получить последний элемент, потому что он не требует ничего питонического знания.источник
some_list[-1]
подход, потому что он более логичен и показывает, что он на самом деле делает лучше, чем,some_list[-1]
на мой взгляд.