Python 迭代时理解列表/生成器项的索引

Python 迭代时理解列表/生成器项的索引,python,Python,迭代时如何访问列表理解中生成的元素 通常我们通过列表[-1]访问最后添加的元素 对于生成器或理解列表,如何在迭代时获取元素 [<access to last element> added for i,item in enumerate(range(10))] [为i添加,枚举中的项(范围(10))] 要构建类似于: i=0 l=[0] while i<10: newItem= 2*l[-1] l+=[newItem]

迭代时如何访问列表理解中生成的元素 通常我们通过
列表[-1]
访问最后添加的元素

对于生成器或理解列表,如何在迭代时获取元素

[<access to last element> added for i,item in enumerate(range(10))]
[为i添加,枚举中的项(范围(10))]
要构建类似于:

    i=0
    l=[0]
    while i<10:
        newItem= 2*l[-1]
        l+=[newItem]
        i+=1
i=0
l=[0]

而我从你的问题中理解了什么:虽然我不确定

l=[1]
[ l.append(l[-1]*2) for i,x in enumerate(l,start=1) if i<10 ]
[None, None, None, None, None, None, None, None, None]
>>> l
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

列表理解不提供此功能。为了简单起见,它们只支持real
For
语句的一小部分,而该功能不在该子集中。如果你真的想,你可以使用像

prev = [None]
l = [(prev.__setitem__(0, do_something_with(prev[0])), prev[0])[1] for i in thing]
但它们的可读性都远不如
for
循环

在Python3中,对于您想要的特性,
map
filter
是列表中的
for
if
子句。输出的第一项是输入的第一项,之后的项通过将上一个输出项和下一个输入项传递给指定的函数来生成

import itertools
def do_something_with(prev_output, next_input):
    return prev_output * next_input

input_list = [1, 4, 2, 5, 3]
l = list(itertools.accumulate(input_list, do_something_with))
# l == [1, 4, 8, 40, 120]

你知道这段代码只会给你一个0的列表,对吧?你的问题不清楚你想构建一些类似于列表理解的函数,对吧???是的!没错@我想这只是一个简单的例子,重要的是如何制作这样的东西@用户3378649检查代码,这是你想要的???这并没有回答他的问题(据我所知)。我相信他是在问如何在前一个元素的基础上向列表中添加一个元素。例如,如果
l=[1]
理解将列表的最后一个元素(在本例中为1)乘以2,然后将结果添加到列表中,该列表现在是
[1,2]
,然后将最后一个元素(现在为2)乘以2并附加结果,重复上述操作。非常方便的回答。谢谢
import itertools
def do_something_with(prev_output, next_input):
    return prev_output * next_input

input_list = [1, 4, 2, 5, 3]
l = list(itertools.accumulate(input_list, do_something_with))
# l == [1, 4, 8, 40, 120]