减少Python中的reduce的收集

时间:2012-11-13 23:23:50

标签: python reduce

如果我在Python中减少一个集合,那么获得其余集合(未访问的项目)的最有效方法是什么?我经常需要减少一个集合,但我希望我的减少功能可以使用我正在减少的集合中未访问的项目。

编辑 - 澄清,我想要类似的东西:

reduce(lambda to-return, item, rest: (code here), collection, initial)

休息是我的lambda尚未看到的物品

1 个答案:

答案 0 :(得分:1)

这是我能做的最好的事情。它希望“集合”可以切割:

def myreduce(func,collection,*args):
    """func takes 3 parameters.  The previous value,
       the current value, and the rest of the collection"""
    def new_func(x,y):
        try:
            return func(x[1],y[1],collection[y[0]:])
        except TypeError:
            return func(x,y[1],collection[y[0]:])
    return reduce(new_func,enumerate(collection),*args)

print myreduce(lambda x,y,rest:x+y+sum(rest),range(30))

请注意,这是非常差测试。在尝试在任何实际代码中使用它之前,请彻底测试。如果你真的想让它适用于任何迭代,你可以在顶部设置一个collection = tuple(collection)(假设你有足够的内存来将你的整个迭代存储在内存中)