l1 = []
l2 = []
for pattern in product([True, False], repeat=len(facs)):
    l1.append([x[1] for x in zip(pattern, facs) if x[0]])
l2.append([x[1] for x in zip(pattern, facs) if not x[0]])
All possibilities to split a list into two lists