Как то так, но тут циклы есть:
import itertools as it
def comb(base_str, num):
comb_list = list(it.combinations(base_str, num))
result = []
for tmp_list in comb_list:
ind_base = 0
ind_comb = 0
full_list = []
while ind_comb < tmp_list.__len__():
while ind_base < base_str.__len__():
if ind_comb < tmp_list.__len__() and base_str[ind_base] == tmp_list[ind_comb]:
full_list.append(base_str[ind_base])
ind_base += 1
ind_comb += 1
else:
full_list.append('-')
ind_base += 1
result.append(full_list)
return result
print(comb('ABCDE', 3))
Результат:
[['A', 'B', 'C', '-', '-'], ['A', 'B', '-', 'D', '-'], ['A', 'B', '-', '-', 'E'], ['A', '-', 'C', 'D', '-'], ['A', '-', 'C', '-', 'E'], ['A', '-', '-', 'D', 'E'], ['-', 'B', 'C', 'D', '-'], ['-', 'B', 'C', '-', 'E'], ['-', 'B', '-', 'D', 'E'], ['-', '-', 'C', 'D', 'E']]