4

I have a list (that may be any length)...

iterable = [A,B,C,D,E,F] # length = 6 in this example

I would like to get all possible groupings of this list that contain all elements (six in the above example) and output a set of sets...

{{{A,B,C,D,E,F}}
{{A}, {B,C,D,E,F}}
{{A}, {B}, {C,D,E,F}}
{{A}, {C}, {B,D,E,F}}
{{A}, {D}, {B,C,E,F}}
{{A}, {E}, {B,C,D,F}}
{{A}, {F}, {B,C,D,E}}
{{A}, {B,C}, {D,E,F}}
{{A}, {B,D}, {C,E,F}}
{{A}, {B,E}, {C,D,F}}
{{A}, {B,F}, {C,D,E}}
{{A}, {C,D}, {B,E,F}}
{{A}, {C,E}, {B,D,F}}
{{A}, {C,F}, {B,D,E}}
{{A}, {D,E}, {B,C,F}}
{{A}, {D,F}, {B,C,E}}
{{A}, {E,F}, {B,C,D}}
{{A}, {B}, {C}, {D,E,F}}
{{A}, {B}, {D}, {C,E,F}}
{{A}, {B}, {E}, {C,D,F}}
{{A}, {B}, {F}, {C,D,F}}
{{A}, {C}, {D}, {B,E,F}}
{{A}, {C}, {E}, {B,D,F}}
{{A}, {C}, {F}, {B,D,E}}
{{A}, {D}, {E}, {B,C,F}}
{{A}, {D}, {F}, {B,C,E}}
{{A}, {E}, {F}, {B,D,E}}
{{A}, {B,C}, {D}, {E,F}}
{{A}, {B,C}, {E}, {D,F}}
{{A}, {B,C}, {F}, {D,E}}
{{A}, {B,D}, {C}, {E,F}}
{{A}, {B,D}, {E}, {C,F}}
{{A}, {B,D}, {F}, {C,E}}
{{A}, {B,E}, {C}, {D,F}}
{{A}, {B,E}, {D}, {C,F}}
{{A}, {B,E}, {F}, {C,D}}
{{A}, {B,F}, {C}, {D,E}}
{{A}, {B,F}, {D}, {C,E}}
{{A}, {B,F}, {E}, {C,D}}
{{A}, {C,D}, {B}, {E,F}}
{{A}, {B}, {C}, {D}, {E,F}}
{{A}, {B}, {C}, {E}, {D,F}}
{{A}, {B}, {C}, {F}, {D,E}}
...
{{A}, {B}, {C}, {D}, {E}, {F}}
{{B}, {A,C,D,E,F}}
{{B}, {A,C}, {D,E,F}}
{{B}, {A,D}, {C,E,F}}
{{C}, {A,B,D,E,F}}
{{D}, {A,B,C,E,F}}
{{E}, {A,B,C,D,F}}
{{F}, {A,B,C,D,E}}
{{A,B}, {C,D,E,F}}
{{A,C}, {B,D,E,F}}
{{A,D}, {B,C,E,F}}
{{A,E}, {B,C,D,F}}
{{A,F}, {B,C,D,E}}
{{B,C}, {A,D,E,F}}
{{B,D}, {A,C,E,F}}
{{B,E}, {A,C,D,F}}
{{B,F}, {A,C,D,E}}
{{C,D}, {A,B,E,F}}
{{C,E}, {A,B,D,F}}
{{C,F}, {A,B,D,E}}
{{D,E}, {A,B,C,F}}
{{D,F}, {A,B,C,E}}
{{E,F}, {A,B,C,D}}
{{A,B,C}, {D,E,F}}
{{A,B,D}, {C,E,F}}
{{A,B,E}, {C,D,F}}
{{A,B,F}, {C,D,E}}
{{A,C,D}, {B,E,F}}
{{A,C,E}, {B,D,F}}
{{A,C,F}, {B,D,E}}
{{A,D,E}, {B,C,F}}
{{A,D,F}, {B,C,E}}
{{A,E,F}, {B,C,D}}
...} # I left out a bunch, but I think you get the idea of what I need

I have been trying to use itertools.combinations as shown below, then using a recursive method to generate the remainder of the set (the letters that don't show up in each of the combinations outputs), but I am failing to receive the desired output.

combinations = set(itertools.chain.from_iterable(itertools.combinations(iterable, r) for r in range(len(iterable)+1)))
ekad
  • 14,436
  • 26
  • 44
  • 46
JohnnyW
  • 483
  • 2
  • 7
  • 16

0 Answers0