2024-06-16 10:20:53 发布
网友
您知道Python中的handy reduce函数。例如,您可以使用它来总结如下列表(假设没有内置的sum):
reduce
reduce(lambda x,y: x+y, [1,2,3,4], 0)
返回(((0+1+2)+3)+4=10。在
如果我想要一份中间金额的清单呢?在本例中,[1,3,6,10]。在
[1,3,6,10]
这是一个丑陋的解决方案。还有更像Python的吗?在
注意:在我写这篇文章之前,不知怎么的我错过了@DSM的答案。去读一读然后投那个,我就投了。如果你想要更长时间的回答,请回来。在
Python有这个特性,称为accumulate,它是从python3.2开始在itertools标准库模块中实现的。可选的第二个参数“func”是在3.3中添加的。在
import itertools l = [1,2,3,4] out = itertools.accumulate(l)
在本例中,out是一个iterable。如果你需要一份名单,那么
out
accumulate()函数可用于生成一个连续的总计,或“累计和”。默认功能是加法。我们可以将函数作为第二个参数传入:
accumulate()
import itertools import operator l = [1,2,3,4] factorial = itertools.accumulate(l, operator.mul)
我们进去了操作员.mul使乘法产生一个运行的乘积。operator模块导出一组与Python的内在运算符相对应的有效函数。在
operator
当然,我们不局限于operator模块中定义的函数。您可以使用任何接受第一个参数中元素类型的2个参数的函数。您可以发挥创造性,但在这里我将相反地使用lambda显式实现默认的加法/求和行为:
import itertools l = [1,2,3,4] out = itertools.accumulate(l, lambda a, b: a + b)
最后,既然您提出了这个问题,我认为使用accumulate比您的循环示例更像python。在
accumulate
如果你把你的解决方案生成一个生成器,它更短,它更好地遵守函数式编程风格。我也会为x添加一个默认值0:
def reducelist(f, lst, x=0): prev = x for i in lst: prev = f(prev, i) yield prev
那绝对是比Python更厉害的。在
我最喜欢的,如果你够新的话:
Python 3.2.1 (default, Jul 12 2011, 22:22:01) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import itertools >>> itertools.accumulate([1,2,3,4]) <itertools.accumulate object at 0x1006baad0> >>> list(itertools.accumulate([1,2,3,4])) [1, 3, 6, 10]
accumulate还接受一个函数参数[尽管是3.3],但它是最新的:
注意:在我写这篇文章之前,不知怎么的我错过了@DSM的答案。去读一读然后投那个,我就投了。如果你想要更长时间的回答,请回来。在
Python有这个特性,称为accumulate,它是从python3.2开始在itertools标准库模块中实现的。可选的第二个参数“func”是在3.3中添加的。在
在本例中,
^{pr2}$out
是一个iterable。如果你需要一份名单,那么accumulate()
函数可用于生成一个连续的总计,或“累计和”。默认功能是加法。我们可以将函数作为第二个参数传入:我们进去了操作员.mul使乘法产生一个运行的乘积。
operator
模块导出一组与Python的内在运算符相对应的有效函数。在当然,我们不局限于
operator
模块中定义的函数。您可以使用任何接受第一个参数中元素类型的2个参数的函数。您可以发挥创造性,但在这里我将相反地使用lambda显式实现默认的加法/求和行为:最后,既然您提出了这个问题,我认为使用
accumulate
比您的循环示例更像python。在如果你把你的解决方案生成一个生成器,它更短,它更好地遵守函数式编程风格。我也会为x添加一个默认值0:
那绝对是比Python更厉害的。在
我最喜欢的,如果你够新的话:
accumulate还接受一个函数参数[尽管是3.3],但它是最新的:
^{pr2}$相关问题 更多 >
编程相关推荐