在Python2中,我可以使用
def subsets(mySet):
return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]])
找到mySet
的所有子集。Python 3已删除reduce
。
那么,有没有同样简洁的重写方法可以用于Python 3呢?
函数reduce()
总是可以用一个for
循环来代替。下面是一个Python实现reduce()
的例子:
def reduce(function, iterable, start=None):
iterator = iter(iterable)
if start is None:
start = next(iterator)
for x in iterator:
start = function(start, x)
return start
reduce()
相比,这个版本不允许将None
作为start
参数传入。reduce()
的参数与特殊情况的代码相对比得到以下结果。def subsets(my_set):
result = [[]]
for x in my_set:
result = result + [y + [x] for y in result]
return result
reduce()
仍然存在 -- 它被移动到functools
模块中。 - Sven Marnachreduce()
版本的? - Randombluechain
这个词从哪里来的? - Randomblue