Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set of all subsets

Tags:

python

set

subset

In Python2 I could use

def subsets(mySet):
    return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]])

to find all subsets of mySet. Python 3 has removed reduce.

What would be an equally concise rewrite of this for Python3?

like image 519
Randomblue Avatar asked Feb 24 '12 22:02

Randomblue


2 Answers

Here's a list of several possible implementations of the power set (the set of all subsets) algorithm in Python. Some are recursive, some are iterative, some of them don't use reduce. Plenty of options to choose from!

like image 62
Óscar López Avatar answered Oct 21 '22 13:10

Óscar López


The function reduce() can always be reaplaced by a for loop. Here's a Python implementation of reduce():

def reduce(function, iterable, start=None):
    iterator = iter(iterable)
    if start is None:
        start = next(iterator)
    for x in iterator:
        start = function(start, x)
    return start

(In contrast to Python's built-in version of reduce(), this version does not allow to pass in None as start parameter.)

Special-casing this code with the parameters you passed to reduce() gives

def subsets(my_set):
    result = [[]]
    for x in my_set:
        result = result + [y + [x] for y in result]
    return result
like image 36
Sven Marnach Avatar answered Oct 21 '22 12:10

Sven Marnach