如果我在Python中减少一个集合,那么获得其余集合(未访问的项目)的最有效方法是什么?我经常需要减少一个集合,但我希望我的减少功能可以使用我正在减少的集合中未访问的项目。
编辑 - 澄清,我想要类似的东西:
reduce(lambda to-return, item, rest: (code here), collection, initial)
休息是我的lambda尚未看到的物品
答案 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)
(假设你有足够的内存来将你的整个迭代存储在内存中)