在列表上执行数学运算(递归与否?)

时间:2014-02-11 23:57:43

标签: python list python-2.7 recursion

假设我们有以下列表

lst = [3,6,1,4]

我希望能够从此列表中获得以下结果

result = [4, 10, 11, 15]

计算模式如下:

1 + 3 = 4

1 + 3 + 6 = 10

1 + 3 + 6 + 1 = 11

1 + 3 + 6 + 1 + 4 = 15

什么是可以解决这个问题的功能

5 个答案:

答案 0 :(得分:4)

[sum(lst[:i+1])+1 for i in range(len(lst))]

最终列表中的每个元素都是原始列表中一个连续元素的总和,对吧?列表推导擅长于从迭代构建列表:)

以下是我们正在做的事情,以及here's the docs on list comps

[sum(lst[:i+1])+1 for i in range(len(lst))]
 ^^^^^^^^^^^^^^^^
# This element is the sum+1 of the slice starting at lst[0] and ending at i,

[sum(lst[:i+1])+1 for i in range(len(lst))]
                  ^^^^^^^^^^^^^^^^^^^^^^^^
# Do this for one element each for every i in range(len(lst))

[sum(lst[:i+1])+1 for i in range(len(lst))]
^                                         ^
# And give me the results as a list.

请注意,您也可以使用相同的格式执行生成器表达式,但使用()而不是[]将其括起来,并且可以使用{key:value for key,value in iterable}

进行词典理解

答案 1 :(得分:2)

如果模式是累积和+ 1,则应该这样做。使用基本的生成器和解决方案相当简单和有效。

def csum(mylist, c=1):
    total = c
    for i in mylist:
        total += i
        yield total 

lst = [3,6,1,4]

print list(csum(lst))
  

输出:[4,10,11,15]

答案 2 :(得分:1)

这可能比列表理解更容易理解:

result = []
total = 1 
lst = [3,6,1,4]

for value in lst:
     total += value
     result.append(total)

print result

答案 3 :(得分:0)

这在您的特定情况下没用,因为您想要为所有内容添加1,但您可以使用原始列表:

In [1]: lst = [3,6,1,4]

In [2]: from itertools import accumulate

In [3]: list(accumulate(lst))
Out[3]: [3, 9, 10, 14]

或者您只需将1添加到列表的开头,然后将其删除即可

In [1]: lst = [1,3,6,1,4]

In [2]: from itertools import accumulate

In [3]: list(accumulate(lst))
Out[3]: [1, 4, 10, 11, 15]

In [4]: list(accumulate(lst))[1:]
Out[4]: [4, 10, 11, 15]

编辑:刚检查过,这对2.7不起作用,对不起。我会留在这里以防其他人发现它有用。

答案 4 :(得分:0)

您还可以使用numpy cumsum函数

 import numpy as np
 lst=[3,6,1,4]
 result=np.cumsum(lst)+1

如果您希望将结果作为列表而不是np数组:

 result=list(np.cumsum(lst)+1)

 result
 [4, 10, 11, 15]