Я думаю, что вы хотите, чтобы получить комбинации каждой группы в отдельности, а затем получить продукт групп.Оттуда вы можете выполнить некоторую обработку, если хотите строки или что-то еще.
from itertools import combinations, product
groups = [[1, 2], [3, 4], ['a', 'b']]
# Note you want groups of all sizes:
sub_combs = []
for g in groups:
group_combs = []
for r in range(len(g)):
combs = combinations(g, r+1) #Combinations of all (nonempty) sizes
group_combs += list(combs)
sub_combs.append(group_combs)
final_combs = list(product(*sub_combs))
final_combs
[((1,), (3,), ('a',)),
((1,), (3,), ('b',)),
((1,), (3,), ('a', 'b')),
((1,), (4,), ('a',)),
((1,), (4,), ('b',)),
((1,), (4,), ('a', 'b')),
((1,), (3, 4), ('a',)),
((1,), (3, 4), ('b',)),
((1,), (3, 4), ('a', 'b')),
((2,), (3,), ('a',)),
((2,), (3,), ('b',)),
((2,), (3,), ('a', 'b')),
((2,), (4,), ('a',)),
((2,), (4,), ('b',)),
((2,), (4,), ('a', 'b')),
((2,), (3, 4), ('a',)),
((2,), (3, 4), ('b',)),
((2,), (3, 4), ('a', 'b')),
((1, 2), (3,), ('a',)),
((1, 2), (3,), ('b',)),
((1, 2), (3,), ('a', 'b')),
((1, 2), (4,), ('a',)),
((1, 2), (4,), ('b',)),
((1, 2), (4,), ('a', 'b')),
((1, 2), (3, 4), ('a',)),
((1, 2), (3, 4), ('b',)),
((1, 2), (3, 4), ('a', 'b'))]