找到子组之间的所有子组

时间:2016-10-27 09:57:24

标签: python algorithm

我有一个子组列表:((1,2),(3,4),(5,6,7))

我需要获得给定子组之间的所有子组(而不仅仅是子组内的子组),

所以对于上面的例子我会得到:

((1,3),(1,4),(1,3,5),(1,3,6),(1,3,7),(1,4,5).....)

我试过了:

itertools.product(*[[1,2],[3,4],[5,6,7]])

但结果是:

(1,3,5) (1,3,6) (1,3,7) (1,4,5) (1,4,6) (1,4,7) (2,3,5) (2,3,6) (2,3,7) (2,4,5) (2,4,6) (2,4,7)

但是(1,3)也是一个有效的组(并且它在结果中缺失)

1 个答案:

答案 0 :(得分:0)

from itertools import combinations
x = sum(((1,2),(3,4),(5,6,7)),())
print [combination for i in range(1,len(x)+1) for combination in combinations(x,i)]

请注意,如果共享一些indince,这将会重复。如果这是不需要的使用:

x=set(sum(((1,2),(3,4),(5,6,7)),()))