# Fix Python – How to get all subsets of a set? (powerset)

## Question

Asked By – patrick

Given a set

``````{0, 1, 2, 3}
``````

How can I produce the subsets:

``````[set(),
{0},
{1},
{2},
{3},
{0, 1},
{0, 2},
{0, 3},
{1, 2},
{1, 3},
{2, 3},
{0, 1, 2},
{0, 1, 3},
{0, 2, 3},
{1, 2, 3},
{0, 1, 2, 3}]
``````

Now we will see solution for issue: How to get all subsets of a set? (powerset)

The Python `itertools` page has exactly a `powerset` recipe for this:

``````from itertools import chain, combinations

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))
``````

Output:

``````>>> list(powerset("abcd"))
[(), ('a',), ('b',), ('c',), ('d',), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd'), ('a', 'b', 'c', 'd')]
``````

If you don’t like that empty tuple at the beginning, you can just change the `range` statement to `range(1, len(s)+1)` to avoid a 0-length combination.

This question is answered By – Mark Rushakoff

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0