在Python2中,我可以使用
def subsets(mySet):
return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]])
找到mySet
的所有子集。 Python 3已删除reduce
。
对Python3来说,同样简洁的重写是什么?
答案 0 :(得分:13)
这是Python中几种可能的幂集(所有子集集)算法的list。有些是递归的,有些是迭代的,有些是不使用reduce
。有很多选择可供选择!
答案 1 :(得分:5)
函数reduce()
始终可以通过for
循环重新获得。这是reduce()
的Python实现:
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
(与Python的内置版reduce()
相比,此版本不允许将None
作为start
参数传递。)
使用传递给reduce()
的参数将此代码特殊包装
def subsets(my_set):
result = [[]]
for x in my_set:
result = result + [y + [x] for y in result]
return result