我们假设我们有一个类,它有一个实例方法接受该类的另一个实例,然后返回该类的新实例。
这种类的一个例子是整数。它有__mul__
方法,它接受另一个整数并返回一个整数,这是两个数字的乘积。
这就是问题所在。我有一个实现像__mul__
这样的方法的类。我有一个这个类的实例列表,我想将前一个对象的上述方法应用到它之前的对象,然后获取结果并将其应用于它之前的那个,等等,直到我们处理完毕整个清单,并有自己的一个对象。
具体示例如下所示。想象一下,我们有一个对象列表......
my_objs = [do, re, me, fa, so, la, te, do]
......想象他们有"结合"方法,遵循上面概述的模式,我们想要应用我概述的程序。你可能会想到这样......
my_objs_together = do.combine(re.combine(me.combine(fa.combine(so.combine(la.combine(te.combine(do)))))))
显然,这很粗糙。这让我想写一个像这样的通用函数......
def together(list_of_objects, method_name):
combined = list_of_objects[0]
for obj in list_of_objects[1:]:
combined = getattr(combined, method_name)(obj)
return combined
...但我觉得可能已经有了标准的库函数,对吗?
答案 0 :(得分:4)
它减少了! (当我发现问题时,我正在写这个问题:/)
https://docs.python.org/2/library/functions.html#reduce
将两个参数的函数累加到iterable的项中, 从左到右,以便将迭代减少到单个值。 例如,
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
计算((((1+2)+3)+4)+5)
。