Используя 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. Я не хочу полагаться на какие-либо генеративные инструменты искусственного интеллекта для решения этой проблемы.
Почему вам «нужно» использовать понимание списка?
Что именно вы хотите напечатать?
Не используйте понимание списка для печати. Используйте понимание списка для создания списка. Если вы затем захотите распечатать этот список, это тривиально и не стоит спрашивать, тогда вам лучше просто спросить о создании списка без печати.
Да, вы, безусловно, правы, нужно создать список, используя понимание списка, а не распечатывать его, используя понимание списка.
Вы можете использовать оператора 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.
@SIGHUP «Я придумал именно этот ответ» — думаю, именно поэтому за него проголосовали…
@nocomment Тогда комментарий типа «Это дубликат» был бы вежливым и уместным.
Надо узнать про оператора Морж, Спасибо за помощь.
Понимание списков не может получить доступ к своему предыдущему результату, поэтому понимание списка здесь не идеально без некоторых хаков. В идеале 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 мне в голову не приходила. Я ценю ваше время и усилия. Я улучшу свои навыки. Если у вас есть что-нибудь, что может помочь мне в этом, я был бы рад посмотреть.
Что заставляет вас думать, что это можно сделать с помощью понимания списка?