我有一个元组。a = ('a1','a2','a3')
。
我想找到它的所有子集,除了空集。我的问题是:'是否有任何内置函数可以执行此操作?'。它应该返回(' a1'),(' a2'),(' a3'),(' a1',' A2&#39),(' A2'' A3&#39),(' A3'' A1'。)
答案 0 :(得分:4)
您可以使用itertools.combinations
和itertools.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')]