我需要创建一个简单的函数来计算累计和(输入元组中的每个值都应替换为当前值之前和包括当前值的所有值的和,因此(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)
我用粗体显示的行不知道如何引用元组(或列表,字典或任何其他作为该函数的参数提供的项目)中的前一项。我相信如果有,行正确吗?
答案 0 :(得分:1)
只需使用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)
这里有live example
答案 1 :(得分:1)
您可以将累积总和附加到单独的列表中以进行输出,以便可以使用索引-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)