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

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

  • автор:

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

Доброго времени суток ,есть набор цифр , он суммируется , и нужно вывести результат , цифры хранятся в словаре :

a=0 for line in ["5", "5", "5", "5", "5", "5"]: a = a + int(line) print(a) 

то что я наваял вполне работает , но есть одно НО , нужно из этого всего вывести только число 30 а не все что он плюсует , прогу вашей помощи,ибо не хватает что то мне опыта )))

echo_
22.05.17 16:25:40 MSK

sum(int(v) for v in ("5", "5", "5", "5", "5", "5")) 

fang90 ★★★★★
( 22.05.17 16:28:23 MSK )

У тебя a печатается на каждой итерации цикла for. А надо только после того как цикл завершится. Просто вытащи print(a) из тела цикла

MrClon ★★★★★
( 22.05.17 16:31:22 MSK )
Последнее исправление: MrClon 22.05.17 16:31:50 MSK (всего исправлений: 1)

Не приходи с такими вопросами, здесь не детский сад.

a=0 for line in ["5", "5", "5", "5", "5", "5"]: a = a + int(line) else: print(a)

Virtuos86 ★★★★★
( 22.05.17 16:43:57 MSK )
Ответ на: комментарий от Virtuos86 22.05.17 16:43:57 MSK

А зачем здесь else?

Davidov ★★★★
( 22.05.17 16:49:48 MSK )
Ответ на: комментарий от Davidov 22.05.17 16:49:48 MSK

Чтобы принт не сработал без цикла случайно.
То есть незачем.

Goury ★★★★★
( 22.05.17 17:01:31 MSK )
Ответ на: комментарий от Virtuos86 22.05.17 16:43:57 MSK

Не приходи с такими ответами, здесь тебе не это.

kukuruku ★★
( 22.05.17 18:00:27 MSK )

Я конкретно затупил(((((((

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

в итоге я снова перебирал это через фор , с надеждой то я это смогу суммировать , но оказалось что нет (, в чем я затупил , как исправить подскажите ?

echo_
( 22.05.17 18:41:01 MSK ) автор топика
Ответ на: комментарий от Virtuos86 22.05.17 16:43:57 MSK

Не приходи с такими вопросами, здесь не детский сад.

Да, конечно сад просто недетский:

Из серии погуглите за меня.

anonymous
( 22.05.17 18:49:07 MSK )

Deleted
( 22.05.17 18:58:23 MSK )
Последнее исправление: merhalak 22.05.17 19:04:33 MSK (всего исправлений: 1)

Ответ на: комментарий от Davidov 22.05.17 16:49:48 MSK

Чтобы логически связать print(a) с циклом. Потому что по смыслу это всё единый блок кода. И нет, если просто написать принт после цикла без ветки else, то единый блок кода будет существовать только в твоей голове, а так мы указываем это средствами ЯП.

Virtuos86 ★★★★★
( 22.05.17 19:04:26 MSK )
Ответ на: комментарий от anonymous 22.05.17 18:49:07 MSK

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

Virtuos86 ★★★★★
( 22.05.17 19:09:09 MSK )
Ответ на: комментарий от Virtuos86 22.05.17 19:04:26 MSK

Жуть какая. for-else — синтаксический костыль. Для логических связей последовательности действий есть функции.

staseg ★★★★★
( 22.05.17 19:25:09 MSK )
Ответ на: комментарий от staseg 22.05.17 19:25:09 MSK

Есть еще и while-else :-).

Для логических связей последовательности действий есть функции.

Функция не спасёт. Поясняю. Есть код:

a=0 for line in ["5", "5", "5", "5", "5", "5"]: a = a + int(line) print(a) 

Далее добавляются некоторые другие строки:

a=0 for line in ["5", "5", "5", "5", "5", "5"]: a = a + int(line) a = a*a . print(a) 

print(a) также печатает a , но изначально печаталось содержимое переменной после цикла, а теперь переменная еще раз изменилась, то есть поменялся смысл строки кода, потому что изменился мир. Если же print(a) находится в ветке else, такого не произойдет, потому что даже постороннему человеку визуально видно, что строка относится к циклу, и ее не нужно отрывать от него. Такая фича, прямо скажем, нужна не часто, но иногда удобна.

Virtuos86 ★★★★★
( 22.05.17 19:45:39 MSK )

Еще бы неплохо подразобраться со структурами данных. Например 5 это число, а «5» это строка. Зачем ты хранишь строки и переводишь их в числа?

А еще то что ты назвал словарем на самом деле является списком.

redixin ★★★★
( 22.05.17 19:55:54 MSK )
Ответ на: комментарий от redixin 22.05.17 19:55:54 MSK

Он пояснил, что читает файл построчно.

А еще то что ты назвал словарем на самом деле является списком.

А в действительности это массив и не имеет отношения к структуре данных «список».

Virtuos86 ★★★★★
( 22.05.17 20:04:14 MSK )
Ответ на: комментарий от Virtuos86 22.05.17 20:04:14 MSK

Ну, технически это всё таки список. Массивы — структуры неизменяемые.

Как вывести последний символ элемента списка в Питоне [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 3 года назад .

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

Где можно обращаться к предпоследнему элементу списка как 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
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 и так далее, либо целое выражение. Нет?

Способы извлечения n последних элементов списка в Python

При помощи синтаксиса среза можно сделать гораздо больше. Синтаксис lst[-n] получает элемент n начиная с конца. Таким образом, list[-1] получает последний элемент, list[-2] получает предпоследний и т. д., вплоть до list[-len(list)] , что дает первый элемент.

Получение N последних элементов реверсом списка.

Если использовать реверс списка, то последние элементы оригинального списка окажутся в начале:

# создаем список >>> lst = list(range(10)) >>> lst # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # переворачиваем список, !обратите внимание, # что метод `.reverse()` изменяет список "на месте" # Если нужно сохранить оригинальный список, то # необходимо работать с копией lst_copy = lst.copy() >>> lst.reverse() >>> lst # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # последние элементы начального списка >>> lst[:5] # [9, 8, 7, 6, 5] 

Если нужно, то результирующий список можно отобразить в обратном порядке:

>>> rev_lst = lst[:5] >>> rev_lst.reverse() >>> rev_lst [5, 6, 7, 8, 9] 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Список Python как аргумент по умолчанию
  • Использование списка в качестве стека
  • Использование списка в качестве очереди
  • Генератор списка list
  • Эффективное использование генераторов списков
  • Операция присваивания на месте и списки
  • Поведение списков Python в разных областях видимости
  • Сравнение и идентичность двух списков
  • Как получить несколько последних элементов списка

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

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