Skip to content Skip to sidebar Skip to footer

All Ways Of Partitioning A List Into Two Non-empty Lists

[0.0, 1.0, 2.0, 3.0, 4.0] I have 5 numbers and two groups, left and right. Each number has two choices - it can go left or right. I need a list that contains all partitioning of th

Solution 1:

The stuff is there in itertools, maybe you just weren't looking in the right places.

Here is teh codez:

from collections import OrderedDict
from itertools import chain, combinations

defpartition(L):
    n = len(L)//2 + 1
    xs = chain(*[combinations(L, i) for i inrange(1, n)])
    pairs = (tuple(sorted([x, tuple(set(L) - set(x))])) for x in xs)
    return OrderedDict.fromkeys(pairs).keys()

Output:

>>>for pair in partition([1,2,3,4]):...    left, right = map(list, sorted(pair, key=len))...print left, right...
[1] [2, 3, 4]
[2] [1, 3, 4]
[3] [1, 2, 4]
[4] [1, 2, 3]
[1, 2] [3, 4]
[1, 3] [2, 4]
[1, 4] [2, 3]

Post a Comment for "All Ways Of Partitioning A List Into Two Non-empty Lists"