带有reduce函数的python cumsum

标签 python functional-programming

我正在尝试使用reduce函数在python中编写累积和的版本。这是到目前为止我的代码:

from functools import reduce

def my_cum_sum(arg):
    return reduce(lambda a, x: (a.append(a[-1] + x)) if len(a) > 0 else a.append(x), arg, [])

assert(my_cum_sum([1, 1, 1, 1]) == [1, 2, 3, 4]))

但问题是,在我的 lambda 函数中,python 不知道 a (我的累加器参数)是一个列表对象,并且我希望我的 reduce 函数返回一个列表。在其他函数式编程语言中,它可能会要求我指定 ax 的类型。但我对 python 很陌生,还不太明白它如何处理类型和东西。解决这个问题的Pythonic方法是什么?

最佳答案

append 返回 None,因此您无法像这样将列表返回到 reduce 中。 只需使用列表与由单个元素组成的列表之间的加法,或者如果列表为空,则仅使用由初始元素组成的列表:

from functools import reduce

def my_cum_sum(arg):
    return reduce(lambda a, x: a + [a[-1]+x] if a else [x], arg, [])

print (my_cum_sum([1, 1, 1, 1]))

结果:

[1, 2, 3, 4]

(请注意,if len(a)>0 也最好写成 if a)

关于带有reduce函数的python cumsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47864028/

相关文章:

python - 在 Python 请求中重试

python - 如何根据同一模型的其他两个列设置sqlalchemy中一列的值?

clojure - 在 Clojure 中从分层树结构创建 ids HashMap 的优雅方法

python - 从范围中选择 randint

json - 使用 JSON 键作为嵌套 JSON 中的属性

functional-programming - 我可以在 PLTScheme 中反汇编我的代码吗?

functional-programming - 如何在 scheme/lisp 中分解这样的列表?

scala - 为什么延迟工厂方法在F的上下文中有返回值

javascript - 通过在 folktale2 中使用函数式编程 javascript,如何优雅地访问先前任务的结果?

python - 过滤月份值不返回对象