表示范围内的i(1,len(A)): A [i] = A [i-1] + A [i]
答案 0 :(得分:2)
您不能使用列表推导,因为它们不允许分配。
您可以使用简单的生成器功能:
def func(lis):
yield lis[0]
for i,x in enumerate(lis[1:],1):
lis[i] = lis[i-1] + x
yield lis[i]
>>> A = [1, 2, 3, 4, 5, 6, 7]
>>> list(func(A))
[1, 3, 6, 10, 15, 21, 28]
答案 1 :(得分:1)
虽然效率较低,但确实可以提供所需的输出。但我认为我在这一点上越接近O(n ** 2)。
A = [sum(A[:i+1]) for i, _ in enumerate(A)]
afaik这不能以你想要的方式完成列表理解。我建议使用你提供的for循环版本。即使可以使用列表理解,也可以只修改列表。
答案 2 :(得分:0)
这应该可以解决问题。
def func(L):
it = iter(L)
v = it.next()
yield v
for x in it:
v += x
yield v
A = [1, 2, 3, 4, 5, 6, 7]
print list(func(A))
这会创建一个迭代器,当时返回一个值。要立即获取完整的新列表,您需要在函数调用周围使用list()调用,如:
list(func(A))
这个生成器函数应该适用于任何可迭代的(也就是那些不支持基于索引获取值的函数,如L [0])
我认为使用理解列表有一种有效的方法。
答案 3 :(得分:0)
使用B(另一个临时变量)。
答案 4 :(得分:0)
单行解决方案使用reduce
:
>>> the_list = [1,2,3,4,5]
>>> reduce(lambda result, x: result+[result[-1] + x] ,the_list, [0])[1:]
[1, 3, 6, 10, 15]