Sourasekhar Banerjee Sourasekhar Banerjee - 1 year ago 67
Python Question

find 2^n -2 combinations of elements in a list

I have the following list:

list1 = ['g1','g2','g3','g4']

I want to find
combinations where
is the total number of items in the list. For
n = 4
the result should be
2^4 -2 = 14
, i.e. 14 combinations.

The combinations are:

[[['g1'],['g2','g3','g4']],[['g2'],['g1','g3','g4']], [['g3'],['g1','g2','g4']],['g4'],['g1','g2','g3']],[['g1','g2'],['g3','g4']],[['g1','g3'],['g2','g4']],[['g1','g4'],['g3','g4']],[['g2','g3'],['g1','g4']],

I know one approach:
in first iteration take single element and put it into a list and other elements in second list:

in second iteration take 2 elements in a list and other elements in second list.

Is there any other approach ??
I'm writing this program in python.
My approach is costly. Is there any library method to do this quickly.

Answer Source

Here's a functional approach using itertools

import itertools as iter

list1 = ['g1', 'g2', 'g3', 'g4']
combinations = [iter.combinations(list1, n) for n in range(1, len(list1))]
flat_combinations = iter.chain.from_iterable(combinations)
result = map(lambda x: [list(x), list(set(list1) - set(x))], flat_combinations)
# [[['g1'], ['g4', 'g3', 'g2']], [['g2'], ['g4', 'g3', 'g1']], [['g3'], ['g4', 'g2', 'g1']],...
# 14
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download