设置A=set([1,2,3]) and set B=set()
现在我需要迭代生成所有可能的组合,如
set([1])
set([2])
set([3])
set([1,2])
set([1,3])
set([2,3])
set([1,2,3])
我公然知道我可以使用itertools的powergenerator配方,但是伪代码是以下形式进一步检查条件(子集条件和密度条件)
a=set()
b=set([1,2,3])
for i in b-a:
a=a|set([i])
for j in a:
print a-set([j])
if den(a-set[j])>=0.6:#check density criteria
# check if a-set([j]) is subset of a on ordering criteria
上面的打印陈述,即打印a-set([j])给出如下输出
set([])
set([2])
set([1])
set([2, 3])
set([1, 3])
set([1, 2])
但我需要以下面的格式输出
set([1])
set([2])
set([3])
set([2, 3])
set([1, 3])
set([1, 2])
set([1,2,3])
答案 0 :(得分:1)
您可以使用itertools.combinations
:
from itertools import combinations
list(combinations(b, 1)) + list(combinations(b, 2)) + list(combinations(b, 3))
#[(1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
答案 1 :(得分:0)
尝试使用iterto0ls查找子集。 itertools
import itertools
a=[1,2,3]
subsets=[]
for i in range(1,4):
for j in itertools.combinations(a,i):
subsets.append(list(j))
print subsets
#output=[[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
如果设置为方法。你可以链接他们,
map(set,subsets)