2012-11-13 46 views
0

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

编辑 - 澄清,我想是这样的:

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

其余地方是我的拉姆达

+0

内置''减少)''(3.x中的/''functools.reduce()')不支持这个功能,所以你必须自己实现它。您的问题还不清楚您是否已经手动执行该操作,如果是,则显示某些代码是合理的。 –

+0

请定义“未访问”。你的意思是你还没有看到的元素? – mgilson

+0

是的,当您减少集合时,您的lambda会看到集合中的每个项目。我还想看看其余的项目 – Hendekagon

回答

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)放在顶端,我想(假设你有足够的内存来存储你的整个迭代在内存中)