|
|||||||
python - Получение последнего элемента списка в Python
Время создания: 29.07.2019 23:51
Раздел: Разные закладки - Python - Модули
Запись: xintrea/mytetra_db_adgaver_new/master/base/1533668103xi4t166sjh/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Как вы получаете последний элемент списка в 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' В функции Комментарий сказал:
Я бы хотел, чтобы у 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 возвращает iterator (который поддерживает протокол итератора), вы можете передать его результат в 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
|
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|