列表理解来替换元素

时间:2013-06-05 04:43:32

标签: list-comprehension

表示范围内的i(1,len(A)):         A [i] = A [i-1] + A [i]

5 个答案:

答案 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]