diff --git a/snippets/powerset.md b/snippets/powerset.md new file mode 100644 index 000000000..3ad8ec69f --- /dev/null +++ b/snippets/powerset.md @@ -0,0 +1,22 @@ +--- +title: powerset +tags: math,list,advanced +--- + +Returns the powerset of a given iterable. + +- Use the `list()` constructor to convert the given value to a `list`. +- Use `range()` and `combinations()` to create a generator the returns all subsets. +- Use `chain.from_iterable()` and the `list()` constructor to consume the generator and return a list. + +```py +from itertools import chain, combinations + +def powerset(iterable): + s = list(iterable) + return list(chain.from_iterable(combinations(s, r) for r in range(len(s)+1))) +``` + +```py +powerset([1, 2]) # [(), (1,), (2,), (1, 2)] +```