facs = ['one', 'two', 'three']
[[[x[1] for x in f] for f in partition(lambda x: x[0], zip(pattern, facs))] for
    pattern in product([True, False], repeat=len(facs))]
All possibilities to split a list into two lists