def combinations(input_list, acc='', from_idx=0):
    if len(input_list) <= from_idx:
        yield acc
return
next_val = input_list[from_idx]
for rest in combinations(input_list, acc, from_idx + 1):
    yield rest
acc += next_val
for rest in combinations(input_list, acc, from_idx + 1):
    yield rest
Какой самый эффективный способ создания комбинаций набора в python?