Как взять последний элемент списка python
Перейти к содержимому

Как взять последний элемент списка python

  • автор:

Методы списков Python

Для добавления множества элементов используйте extend() . Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.clear( i ) ¶

Удаляет из списка все имеющиеся в нём значения.

my_list = [1, 2, 3]
my_list.clear() # None
my_list # []

Действие метода эквивалентно выражению del my_list[:] .

list.copy() ¶

Возвращает копию списка. Внимание: Возвращаемая копия является поверхностной (без рекурсивного копирования вложенных элементов).

my_list = [1, 2, 3]
my_list_copy = my_list.copy() # [1, 2, 3]
my_list # []

Действие метода эквивалентно выражению my_list[:] .

list.count(x) ¶

random_list = [4, 1, 5, 4, 10, 4]
random_list.count(4) # 3

Метод count считает количество значений x в списке.

list.extend(iterable) ¶

Дополняет список элементами из указанного объекта.

  • it : Объект, поддерживающий итерирование, элементами которого требуется дополнить список.
my_list = []
my_list.extend([1, 2, 3]) # None
my_list # [1, 2, 3]
my_list.extend('add') # None
my_list # [1, 2, 3, 'a', 'd', 'd']

Для добавления единственного элемента используйте append() .

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.index(x , start , end ) ¶

Метод возвращает положение первого индекса, со значением х . Также можно указать границы поиска start и end .

list.insert(i, x) ¶

Вставляет указанный элемент перед указанным индексом

  • i : Позиция (индекс), перед которой требуется поместить элемент. Нумерация ведётся с нуля. Поддерживается отрицательная индексация.
  • x : Элемент, который требуется поместить в список.
my_list = [1, 3]
my_list.insert(1, 2)
my_list # [1, 2, 3]
my_list.insert(-1, 4)
my_list # [1, 2, 4, 3]

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.pop( i ) ¶

Возвращает элемент на указанной позиции , удаляя его из списка.

  • i=None : Позиция искомого элемента в списке (целое число). Если не указана, считается что имеется в виду последний элемент списка. Отрицательные числа поддерживаются.
my_list = [1, 2, 3, 4, 5]
last = my_list.pop() # 5
my_list # [1, 2, 3, 4]
second = my_list.pop(-3) # 2
my_list # [1, 3, 4]
first = my_list.pop(0) # 1
my_list # [3, 4]

Чтобы удалить элемент из списка не возвращая его, воспользуйтесь list.remove() .

list.remove(x) ¶

Удаляет из списка указанный элемент.

  • x : Элемент, который требуется удалить из списка. Если элемент отсутствует в списке, возбуждается ValueError . Удаляется только первый обнаруженный в списке элемент, значение которого совпадает со значением переданного в метод.
my_list = [1, 3, 1]
my_list.remove(1)
my_list # [3, 1]
my_list.remove(4) # ValueError

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.reverse() ¶

Перестраивает элементы списка в обратном порядке.

my_list = [1, 'two', 'a', 4]
my_list.reverse() # None
my_list # [4, 'a', 'two', 1]

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

list.sort(key=None, reverse=False) ¶

Сортирует элементы списка на месте.

  • key=None : Функция, принимающая аргументом элемент, используемая для получения из этого элемента значения для сравнения его с другими.
  • reverse=False : Флаг, указывающий следует ли производить сортировку в обратном порядке.
my_list = [1, 'two', 'a', 4, 'a']
# Попытка упорядочить/сравнить несравнимые типы вызовет исключение
my_list.sort() # TypeError: unorderable types: str()
# Отсортируем «вручную», так чтобы 'а' были в конце.
my_list.sort(key=lambda val: val == 'a') # None
# Фактически мы отсортировали в соответствии
# с маской [False, False, False, True, True]
my_list # ['two', 4, 1, 'a', 'a']

Внимание: Данный метод модифицирует исходный объект на месте, возвращая при этом None .

Артём Санников

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

SQL без слёз

Цель книги заключается в том, чтобы научить любого человека работать с реляционными базами данных и получать из них необходимую информацию посредством выполнения SQL-запросов.

Главная › Языки программирования › Python › Списки › Обращение к элементам списка в Python

Обращение к элементам списка в Python

Списки представляют собой упорядоченные наборы данных, поэтому для обращения к любому элементу списка необходимо сообщить Python позицию (индекс) нужного элемента.

Чтобы обратиться к элементу в списке, необходимо указать имя списка, за которым следует индекс элемента в квадратных скобках.

Важный момент: списки начинаются с 0, то есть первый элемент списка имеет индекс [0].

Важный момент 2: чтобы вывести самый последний элемент в списке обратитесь по индексу [-1].

Давайте в качестве примера выведем первый элемент нашего списка:

# Выведем первый элемент списка users = ['Иванов', 'Сидоров', 'Петров', 'Иванов'] print(users[0]) # Результат в консоли: Иванов # Выведем последний элемент списка users = ['Иванов', 'Сидоров', 'Петров', 'Иванов'] print(users[-1]) # Результат в консоли: Иванов

Записи по теме

  • Проверка отсутствия значения в списке Python
  • Проверка вхождения значения в список Python
  • Копирование списка в Python
  • Перебор содержимого среза списка в Python
  • Срез для списка в Python
  • Генератор списков в Python
  • Создание числового списка при помощи range() в Python
  • Перебор всего списка в Python

Проверка на последний элемент списка Python

В моем коде в список рандомно добавляются несколько значений и мне надо чтобы в конце оно делало проверку последнего элемента и в зависимости от того какой элемент последний — выводило на экран разные значения

Лучший ответ

if твой_список [-1] == значение_на_которое проверяешь:
твои_действия

Остальные ответы

some_list[-1] -самый короткий и самый питонический. Синтаксис some_list[-n] получает элемент nth-to-last. Таким образом, some_list[-1] получает последний элемент
Источник: сначала поиск в гугл: https://www.google.com/search?q=последний+элемент+списка+Python
затем статья: https://coderoad.ru/930397/Получение-последнего-элемента-списка

Вывод: пользуйтесь поиском Гугл прежде чем задать вопрос, особенно если это касается Программирования и популярных ЯП.

Где можно обращаться к предпоследнему элементу списка как List(END-1) ?

Если сравниваем, то видим, что python и Перл — это кака, а tcl — конфетка. Проблемы питона: а вдруг я не имел в виду индекс с конца, а просто ошибся и неправильно вычислил индекс? А вдруг в списке всего один элемент? Правда, и tcl не выдаст ошибки, а выдаст пустую строку, но зато хотя бы есть способ _ясно_ сказать, что я имею в виду именно элемент энный с конца. Это вроде мелочь, но в tcl таких мелочей много и они хорошо складываются.

Соответственно, вопрос такой: откуда такие красивые мелочи в tcl, и где ещё подобное есть?

И вот предварительные итоги опроса

bar[0 .. $] 

Matlab, Julia — так же как в tcl

xs[end-1] 

red — особый сахар для итераторов, хотя и не совсем то же:

 first back back tail a 

С++ — итераторы приближаются к желаемому, хотя не совсем то

std::prev(std::prev(std::end(some_container))) 

Также есть advance, к-рый позволяет не считать на пальцах. Однако для извлечения подсписка придётся обратиться к списку дважды, или запомнить итератор в переменной. А ещё вот так: std::end(v)[-2];

Rust — примерно то же, что С++, Вот велосипед для извлечения середины списка. Итератор от конца

v.iter().rev() 
data Index = Begin Int | End Int 

По сути это решение можно реализовать в любом ООП языке, если вместо индекса использовать объект, и ввести объект «индекс от конца» — потомок индекса. Тут возникают вопросы про то, что это не интегрировано в стандартную библиотеку. Насчёт интеграции в такую библиотеку некие слова были сказаны, но уверенного «да запросто» я не припомню.

A'Last 

Антиприз достаётся Перлу и Питону, у которых для получения элемента от конца используется отрицательный индекс:

Этот факт не даёт выявить в рантайме такую ошибку, как ошибочно вычисленный отрицательный индекс. Антиприз мог бы получить и сам tcl, поскольку у него доступ к индексу за пределы массива возвращает пустоту. Однако в tcl этот вопрос ортогонален к вопросу получения предпоследнего элемента, а в Питоне и Перле — нет.

den73 ★★★★★
20.08.17 00:46:18 MSK
Последнее исправление: den73 25.08.17 20:29:44 MSK (всего исправлений: 6)

1 2 3 4 5 →

Поддерживаю. В ЯП не должно быть слишком много синтаксического сахара.

peregrine ★★★★★
( 20.08.17 01:07:18 MSK )
Ответ на: комментарий от peregrine 20.08.17 01:07:18 MSK

Уточнил сказанное. На самом-то деле, это не лишний сахар, а лишний полиморфизм, который перекрывает естественный смысл отрицательного индекса (ошибка) сахарным (индекс от конца).

В tcl полиморфизма нет, а сахар есть.

den73 ★★★★★
( 20.08.17 01:11:58 MSK ) автор топика

Мне нравится голенг тем, что в нем нет синтаксического сахара. Т.е. все, вплоть до конвертации int в int32 происходит явно. Но это пока на сцену не выходит пустой интерфейс, но это уже совсем другая история. В языках в перегрузкой операторов, типа шарпа, например, никто не запрещает сделать свойство End, чтобы выглядело как myCollection.End[-2] которое бы возвращало индексатор, но это уже более ввсокоуровневая абстракция.

nikolnik ★★★
( 20.08.17 01:21:34 MSK )

some_vector.end() - 2; 

evilface ★★
( 20.08.17 01:48:18 MSK )
Ответ на: комментарий от evilface 20.08.17 01:48:18 MSK

std::next(std::rbegin(some_container))
std::prev(std::prev(std::end(some_container)))

Еще вариации на такую тему:

auto i = std::end(some_container); std::advance(i, -2); 
auto i = std::begin(some_container); for (; std::distance(i, std::end(some_container)) != 2; ++i) continue; 

BruteForce ★★★
( 20.08.17 02:45:23 MSK )
Последнее исправление: BruteForce 20.08.17 02:53:23 MSK (всего исправлений: 3)

Ответ на: комментарий от evilface 20.08.17 01:48:18 MSK

Если уже знаешь значение и оно уникально:

auto known_value; auto i = std::find(std::begin(v), std::end(v), known_value); 

Если знаешь значение и хочешь производительности (или гарантированно уникально только в последних двух элементах):

auto known_value; auto i = std::find(std::rbegin(v), std::rend(v), known_value); 

Если знаешь последнее значение и у тебя есть какой-то непонятный итератор:

auto known_value; if (i == std::end(some_container)) i = std::prev(i); else while (*i != known_value) ++i; i = std::prev(i); 

BruteForce ★★★
( 20.08.17 03:00:34 MSK )
Последнее исправление: BruteForce 20.08.17 03:06:40 MSK (всего исправлений: 2)

Проблемы питона: а вдруг я не имел в виду индекс с конца, а просто ошибся и неправильно вычислил индекс?

проблемы питона, такие проблемы питона

shty ★★★★★
( 20.08.17 03:07:38 MSK )

Всё херня надо так

 value = llast(some_list) value = lfirst(some_list) или value = some_list.last value = some_list.first 

Dron ★★★★★
( 20.08.17 03:15:07 MSK )
Ответ на: комментарий от Dron 20.08.17 03:15:07 MSK

А предпоследний? А пятый с конца?

NeXTSTEP ★★
( 20.08.17 03:36:04 MSK )
Ответ на: комментарий от NeXTSTEP 20.08.17 03:36:04 MSK

Тьфу ты, я невнимательно прочёл, тогда так

 value = llast(some_list,-1) //предпоследний value = lfirst(some_list,1) //второй или value = some_list[some_list.last -1] value = some_list[some_list.first,1] 

. херня какая то получилась.

 value = some_list[listlen(some_list, -1)] //предпоследний value = some_list[listlen(some_list, 1)] //второй 

Dron ★★★★★
( 20.08.17 03:50:32 MSK )

А какая практическая польза, как часто приходится брать n элемент с конца списка и при этом по какой-то причине не оформлять это отдельной функцией, которая и с отсутствующим элементом разберется и исключения половит, если надо.

А, ну да, проблемы интерпретируемых языков же.

anonymous
( 20.08.17 04:12:27 MSK )

let array = [1, 2, 3, 4, 5]; let item = array.iter().rev().nth(1); 
 При том вернёт Some(value) если элемент есть и None, если нет.

Deleted
( 20.08.17 05:41:10 MSK )

val *= 5 

В Tcl надо писать:

set val

Такой классный язык, в котором даже присваивание нормально нельзя записать.

rupert ★★★★★
( 20.08.17 06:50:12 MSK )

end = -1 some_list[end-1] 

E ★★★
( 20.08.17 08:17:55 MSK )
Последнее исправление: E 20.08.17 08:18:05 MSK (всего исправлений: 1)

Каждый раз убеждаюсь, что божественный питон просто божественнен

zolden ★★★★★
( 20.08.17 08:43:17 MSK )
Ответ на: комментарий от evilface 20.08.17 01:48:18 MSK

Это ведь наверное итератор? А его ещё нужно «разыменовать». Смотри как можно ещё в tcl:

lrange 1 end-1 

Получится Список упомянут только один раз. Можно так в плюсах?
den73 ★★★★★
( 20.08.17 08:47:43 MSK ) автор топика
Ответ на: комментарий от rupert 20.08.17 06:50:12 MSK

А это часто нужно? А вот более частое засахарено как надо:

incr v 5 # то же, что v += 5 

А вообще у tcl есть не только достоинства, конечно же. Но я сейчас конкретно про end. Просто обнаружил внезапно, что ни в одном другом языке больше такого не видел.

den73 ★★★★★
( 20.08.17 08:53:11 MSK ) автор топика

[1,2,3][-1:]

itn ★★★
( 20.08.17 09:09:22 MSK )

Я всегда думал, что предпоследний — это второй (2) с конца. Перепиши пример так:

end = len(some_list) - 1 # индекс последнего элемента списка, -1 - потому что индексация идет с нуля some_list[end - 1] some_list[len(some_list) - 2] some_list[-2] 

так как «сахар» позволяет не указывать длину списка, ибо она вычисляется автоматически

Но если не охота разбираться в базовых понятиях, на которых посторен язык, то, конечно, это кака и бяка, и что там еще есть.

Virtuos86 ★★★★★
( 20.08.17 09:13:25 MSK )

Ada имхо и VHDL

unixwz
( 20.08.17 09:17:36 MSK )

Если сравниваем, то видим, что python и Перл — это кака, а tcl — конфетка. Проблемы питона: а вдруг я не имел в виду индекс с конца, а просто ошибся и неправильно вычислил индекс? А вдруг в списке всего один элемент?

Тогда ты получишь ошибку в рантайме. Но питон выдаст стэктрейс, который тебя приведет к месту ошибки. Большего от «скриптопараши» и желать нечего. А то, что погроммист иногда допускает описки — в этом нет ничего страшного. Делай перерывы в работе, занимайся физкультурой — сидячая работа, связанная с необходимостью поддерживать концентрацию и умственное напряжение, как ни странно, требует хорошей физподготовки, шахматисты подтвердят.

Правда, и tcl не выдаст ошибки, а выдаст пустую строку, но зато хотя бы есть способ _ясно_ сказать, что я имею в виду именно элемент энный с конца. Это вроде мелочь, но в tcl таких мелочей много и они хорошо складываются.

То есть тикль проглотит твою описку, и тебе это по нраву. Так и запишем.

Virtuos86 ★★★★★
( 20.08.17 09:19:33 MSK )
Последнее исправление: Virtuos86 20.08.17 09:20:27 MSK (всего исправлений: 1)

Ответ на: комментарий от Virtuos86 20.08.17 09:19:33 MSK

Видимо, ты невнимательно прочитал пост. Ещё раз: я говорил о том, что явное указание, что я хочу предпоследний элемент, с помощью слова end, лучше, чем неявное -1, к-рое может с тем же успехом быть ошибкой. Тогда вместо stack trace получишь неправильно работающую программу.

Я здесь не сравниваю питон и тикль в целом. То, что тикль не возвращает ошибки — тоже плохо. Я говорю лишь о красоте этого решения и о том, что оно более правильное, сахарное и редкое.

den73 ★★★★★
( 20.08.17 09:26:07 MSK ) автор топика
Ответ на: комментарий от den73 20.08.17 09:26:07 MSK

Но тогда получается, что ты сейчас обыгрываешь известную проблему «magic numbers». В нормальной, не хеллоуворлдной программе никаких -1, -2 и -N не будет, а будут вычисляемые до места использования переменные типа index_of_item и так далее, либо целое выражение. Нет?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *