我需要创建一个简单的函数来计算累积总和(输入元组中的每个值都应替换为当前值之前的所有值的总和,因此(1,2,3(成为(1,3,6((的参数,您可以假设它是按值传递的。使用可变长度参数访问这些值,并将结果作为元组返回。
我的想法是使用 for 循环,但我不知道如何在可变长度参数中引用前面的项目。 以下是我到目前为止所拥有的。
def simple_tuple_func(*args):
# Compute cumulative sum of each value
print(type(args))
for idx in args:
**idx += {itm}**
simple_tuple_func(1,2,3)
我加粗的行是我不确定如何在元组(或列表、字典或任何其他作为函数参数给出的项(中引用前一项的地方。 我相信如果我的那行正确,它会起作用吗?
您可以将累积总和追加到单独的列表中以进行输出,以便可以使用索引-1
访问前面的累积总和:
def simple_tuple_func(*args):
cumulative_sums = []
for i in args:
cumulative_sums.append((cumulative_sums[-1] if cumulative_sums else 0) + i)
return tuple(cumulative_sums)
因此:
simple_tuple_func(1,2,3)
将返回:
(1, 3, 6)
只需使用itertools.accumulate
:
def simple_tuple_func(*args):
return tuple(itertools.accumulate(args, lambda x, y: x+y))
或者循环:
def simple_tuple_func(*args):
res = []
if not args:
return res
accum, *tail = args #unpacking, accum will take first element and tail de rest elements in the args tuple
for e in tail:
res.append(accum)
accum += e
res.append(accum)
return tuple(res)
这里有活生生的例子