在python中查找集合的子集

时间:2017-06-11 17:38:46

标签: python set tuples subset

我有一个元组。a = ('a1','a2','a3')。 我想找到它的所有子集,除了空集。我的问题是:'是否有任何内置函数可以执行此操作?'。它应该返回(' a1'),(' a2'),(' a3'),(' a1',' A2&#39),(' A2'' A3&#39),(' A3'' A1'。)

2 个答案:

答案 0 :(得分:4)

您可以使用itertools.combinationsitertools.chain

In [13]: from itertools import combinations, chain

In [14]: a = ('a1','a2','a3')

In [15]: list(chain(*(combinations(a, i) for i in xrange(1, len(a)))))
Out[15]: [('a1',), ('a2',), ('a3',), ('a1', 'a2'), ('a1', 'a3'), ('a2', 'a3')]

答案 1 :(得分:4)

itertools中有recipe power sets

def powerset(iterable):
    "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))

用你的例子:

>>> list(it.chain.from_iterable(it.combinations(a, r) for r in range(1, len(a)+1)))
[('a1',), ('a2',), ('a3',), ('a1', 'a2'), ('a1', 'a3'), ('a2', 'a3'), ('a1', 'a2', 'a3')]