Распечатка последовательности с использованием понимания списка вместо цикла for

Используя Python, я хочу сгенерировать последовательность [0,2,6,12,20,30,42,56,72,90]; Логика, которую я понял, такая

i,j =0,0
for i in range(1,10):
j+= 2*i
print(j)

Вместо цикла for мне нужно сгенерировать то же самое, используя понимание списка. и я изо всех сил старался это сделать, но в итоге безрезультатно. Я пробовал использовать это

j =[0]
j = [j[i-1] + 2*i for i in range(1,10)]

и в итоге я получил ошибку list out of index, и это справедливо. Я понятия не имею, как это сделать; Поэтому я здесь. Может ли кто-нибудь мне помочь? P.S. Я не хочу полагаться на какие-либо генеративные инструменты искусственного интеллекта для решения этой проблемы.

Что заставляет вас думать, что это можно сделать с помощью понимания списка?

Scott Hunter 26.08.2024 16:32

Почему вам «нужно» использовать понимание списка?

SIGHUP 26.08.2024 16:32

Что именно вы хотите напечатать?

no comment 26.08.2024 16:36

Не используйте понимание списка для печати. Используйте понимание списка для создания списка. Если вы затем захотите распечатать этот список, это тривиально и не стоит спрашивать, тогда вам лучше просто спросить о создании списка без печати.

no comment 26.08.2024 16:38

Да, вы, безусловно, правы, нужно создать список, используя понимание списка, а не распечатывать его, используя понимание списка.

Raphael Von Eigendorf 26.08.2024 16:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать оператора Walrus

питон >=3,8

Морж

j=0
[j:= j + 2 * i for i in range(1,10)]

Выход

#[2, 6, 12, 20, 30, 42, 56, 72, 90]

Это очень странно. Я придумал именно этот ответ (очевидно, прежде чем увидел это), и он был отклонен. Я еще раз говорю это... Если люди собираются проголосовать против, они должны быть обязаны предоставить обоснование. Я проголосовал за это, поэтому мне интересно следить за этим и посмотреть, начнут ли недоброжелатели его отрицать, и (надеюсь) объяснить, почему

SIGHUP 26.08.2024 16:40

Я полностью с тобой согласен @SIGHUP.

Free Palestine 26.08.2024 16:41

@SIGHUP «Я придумал именно этот ответ» — думаю, именно поэтому за него проголосовали…

no comment 26.08.2024 16:50

@nocomment Тогда комментарий типа «Это дубликат» был бы вежливым и уместным.

SIGHUP 26.08.2024 16:51

Надо узнать про оператора Морж, Спасибо за помощь.

Raphael Von Eigendorf 26.08.2024 17:05
Ответ принят как подходящий

Понимание списков не может получить доступ к своему предыдущему результату, поэтому понимание списка здесь не идеально без некоторых хаков. В идеале itertools.accumulate:

>>> from itertools import accumulate
>>> list(accumulate(range(10), lambda j, i: j + 2 * i))
[0, 2, 6, 12, 20, 30, 42, 56, 72, 90]

Спасибо, приятель, я пытался использовать в нем лямбда-выражение без itertools, но план имел неприятные последствия, поскольку идея использования itertools мне в голову не приходила. Я ценю ваше время и усилия. Я улучшу свои навыки. Если у вас есть что-нибудь, что может помочь мне в этом, я был бы рад посмотреть.

Raphael Von Eigendorf 26.08.2024 17:04

Другие вопросы по теме