BokBok - 1 year ago 85
Python Question

# What is this set of all sets one line function doing?

I found this one line function on the python wiki that creates a set of all sets that can be created from a list passed as an argument.

``````f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))]
``````

Can someone please explain how this function works?

To construct the powerset, iterating over `2**len(set(x))` gives you all the binary combinations of the set.

``````range(2**len(set(x))) == [00000, 00001, 00010, ..., 11110, 11111]
``````

Now you just need to test if the bit is set in `i` to see if you need to include it in the set, e.g.:

``````>>> i = 0b10010
>>> [y for j, y in enumerate(range(5)) if (i >> j) & 1]
[1, 4]
``````

This would be equivalent to:

``````[[y for j, y in enumerate(set(x)) if i[j]] for i in itertools.product([0,1], repeat=len(set(x))+1)]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download