您好,这是我第一次来这里!
作为一个赋值我得到了这个:现在创建一个新函数cumulative_sum,它返回一个新列表,其中第i个元素是原始列表中第一个i + 1个元素的总和。例如,[4,3,6]的累积和是[4,7,13]。
所以我写了这段代码:
list_1 = [4, 6, 3]
def cumulative_sum(a_list):
list_2 = []
list_2.append(a_list[0])
x = 1
y = 0
for i in a_list:
if len(a_list) == x:
break
else:
var1 = list_2[x]
var2 = a_list[y]
var3 = var1 + var2
list_2.append(var3)
x +=1
y +=1
return list_2
print cumulative_sum(list_1)
但是我仍然得到一个索引超出范围的错误,即使我有一个绑定检查,如:
if len(a_list) == x:
break
原谅我的英语!我欢迎任何有关我的代码的其他提示
这是追溯:
IndexError Traceback (most recent call last)
/Applications/Canopy.app/appdata/canopy-1.4.1.1975.macosx-x86_64/Canopy.app/Contents/lib/python2.7/site-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
202 else:
203 filename = fname
--> 204 __builtin__.execfile(filename, *where)
/Users/arkin/programming/multadd.py in <module>()
97 return list_2
98
---> 99 print cumulative_sum(list_1)
100
101
/Users/arkin/programming/multadd.py in cumulative_sum(a_list)
89 break
90 else:
---> 91 var1 = list_2[x]
92 var2 = a_list[y]
93 var3 = var1 + var2
答案 0 :(得分:4)
您无法将元素分配到尚不存在的索引的列表中。您应该使用append
来执行此操作。
def cumulative_sum(l):
total = 0 # initialize the total to zero
cumulative = [] # initialize an empty list
for num in l: # iterate over each number in original list
total += num # calculate the cumulative total to this element
cumulative.append(total) # append to the cumulative list
return cumulative
使用您的示例输入和输出
>>> cumulative_sum([4,3,6])
[4, 7, 13]
修改强>
更简单的方法是使用一些Python库
import itertools
import operator
def cumulative_sum(l):
return list(itertools.accumulate(l, operator.add))
答案 1 :(得分:1)
除了@ Cyber的答案,这是一个很好的,简洁的答案(虽然不是非常pythonic;),回答为什么你的原始代码不起作用:你只需要[x]
和{{1}当您提取[y]
和var1
的值时,会翻转下标。否则它实际上工作正常。这是您更正后的代码:
var2
答案 2 :(得分:1)
另一个:
def cumulative_sum(lst):
new_lst = []
for i in range(len(lst)):
new_lst.append(sum(lst[:i + 1]))
return new_lst
切片没有这个索引超出限制的问题。
答案 3 :(得分:0)
这个怎么样
s = [4,5,6]
y = []
for i in s:
if s.index(i) == 0:
y.append(i)
else:
t = y[len(y) -1] + i;
y.append(t)
>>> y
[4, 9, 15]
Simples!