我正在尝试实现一个函数来生成列表的powerset xs
.
一般的想法是我们遍历元素xs
并选择是否包括x
.我面临的问题是withX
最终等于[None]
(单个列表None
)因为(我认为)s.add(x)
返回None
.
这不是一个家庭作业,它是一个破解编码面试的练习.
def powerSetBF(xs): powerSet = [] powerSet.append(set([])) for x in xs: powerSetCopy = powerSet[:] withX = [s.add(x) for s in powerSetCopy] # add x to the list of sets powerSet = powerSet.extend(withX) # append those entries return powerSet
pylang.. 6
看看食谱中的powerset
例子:itertools
from itertools import chain, combinations def powerset(iterable): "list(powerset([1,2,3])) --> [(), (1,), (2,), (3,), (1,2), (1,3), (2,3), (1,2,3)]" s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
对于一个range
长度达到给定列表长度的整数,使所有可能combinations
和chain
它们一起作为一个对象.
看看食谱中的powerset
例子:itertools
from itertools import chain, combinations def powerset(iterable): "list(powerset([1,2,3])) --> [(), (1,), (2,), (3,), (1,2), (1,3), (2,3), (1,2,3)]" s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
对于一个range
长度达到给定列表长度的整数,使所有可能combinations
和chain
它们一起作为一个对象.