Powersets

The Powerset is all combinations of an array’s elements.

def powerset(arr):
    if len(arr) <= 0:
        yield []
    else:
        for item in powerset(arr[1:]):
            yield [arr[0]] + item
            yield item

If iterated through in a list comprehension, this returns:

[x for x in powerset([1,2,3])]
[[1, 2, 3], [2, 3], [1, 3], [3], [1, 2], [2], [1], []]