我的代码中的问题是for
在类模式中循环for i in self.sets:
;问题是您可以看到输入V=set([1,2,3,4])
,因此类模式中的for
循环执行set枚举。
最初循环从i=set([1]
开始[set([1]), set([2]), set([3]), set([4])]
}并相应地枚举返回[set([1, 2]), set([1, 3]), set([1, 4])]
和[set([1, 2, 3]), set([1, 2, 4])]
,最后返回`[set([1,2,3,4]] )]来自i = set([1])。
现在上面循环的问题是,它总是从i=set([1])
开始,而不是它应该跳到i=set([2]), set([3]) etc.
,每个枚举以每个元素的[set([1, 2, 3, 4])] for the above input V
结束,从而产生所有可能的结果组合。
class pattern(object):
def __init__(self,node,sets):
self.node=node
self.sets=sets
def enum(self):
for i in self.sets:
L=[]
print "i"
print i
for j in self.node:
if i!=j:
if type(i) is int:
L.append(set([i])|set([j]))
else:
if j not in i:
L.append(i|set([j]))
return L
V=set([1,2,3,4])
U=[]
h=[]
num=0
for i in V:
cnt=1
for j in range(1,len(V)+1):
if cnt==1 or U==list(V):
U=[]
for a in V:
U.append(set([a]))
#print U
else:
p=pattern(V,U)
h=p.enum()
上面的模式类必须在第一次调用时返回[set([1,2]),set([1,3]),set([1,4])]和[set([1] ,2,3]),第二次设置([1,2,4])]和第三次设置[设置([1,2,3,4])]如果你能观察它返回的全部是枚举1与其他数字,所以现在它应该枚举2与其他数字类似,如前1所做但它不考虑2或3或4,但每次它考虑1并返回sam结果如上
答案 0 :(得分:0)
我相信你试图枚举集合V
中所有元素的组合,而无需替换。您可以使用python库执行以下操作。
import itertools
def all_combinations(v):
for i in range(len(v)):
for c in itertools.combinations(v, i + 1):
yield c
list(all_combinations([1,2,3,4]))
产量
[(1,),
(2,),
(3,),
(4,),
(1, 2),
(1, 3),
(1, 4),
(2, 3),
(2, 4),
(3, 4),
(1, 2, 3),
(1, 2, 4),
(1, 3, 4),
(2, 3, 4),
(1, 2, 3, 4)]