这是我能做的最好的还没有看到的项目。据预计,“收藏”是可切片:
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)
放在顶端,我想(假设你有足够的内存来存储你的整个迭代在内存中)
内置''减少)''(3.x中的/''functools.reduce()')不支持这个功能,所以你必须自己实现它。您的问题还不清楚您是否已经手动执行该操作,如果是,则显示某些代码是合理的。 –
请定义“未访问”。你的意思是你还没有看到的元素? – mgilson
是的,当您减少集合时,您的lambda会看到集合中的每个项目。我还想看看其余的项目 – Hendekagon