У меня проблема с функцией, которая должна возвращать все возможные комбинации в списке без повторения образца.
Функция работает отлично, но я не могу получить список всех комбинаций:
abc = ['a','b','c','d','e']
def combi(pre, listg, stage=1,first = 1):
if len(listg)==0:
return []
start = first
lifeat =[]
for i in range(start,len(listg)):
lifeat.append(pre + [listg[i]])
print('stage: ',stage,'|| ',i,' ',pre + [listg[i]])
diff = set(listg[i:]) - set(pre+[listg[i]])
seted= [item for item in listg[i:] if item in diff]
li = combi(pre+ [listg[i]],seted,stage+1, first= 0)
#print('li : ',li)
return lifeat+li
def all_combi(liste):
return combi([liste[0]], liste)
all_combi(abc)
напечатанный результат: print('stage: ',stage,'|| ',i,' ',pre + [listg[i]])
stage: 1 || 1 ['a', 'b']
stage: 2 || 0 ['a', 'b', 'c']
stage: 3 || 0 ['a', 'b', 'c', 'd']
stage: 4 || 0 ['a', 'b', 'c', 'd', 'e']
stage: 3 || 1 ['a', 'b', 'c', 'e']
stage: 2 || 1 ['a', 'b', 'd']
stage: 3 || 0 ['a', 'b', 'd', 'e']
stage: 2 || 2 ['a', 'b', 'e']
stage: 1 || 2 ['a', 'c']
stage: 2 || 0 ['a', 'c', 'd']
stage: 3 || 0 ['a', 'c', 'd', 'e']
stage: 2 || 1 ['a', 'c', 'e']
stage: 1 || 3 ['a', 'd']
stage: 2 || 0 ['a', 'd', 'e']
stage: 1 || 4 ['a', 'e']
Это вывод, который я получил: вывод
[['a', 'b'], ['a', 'c'], ['a', 'd'], ['a', 'e']]
Заранее благодарю за любую помощь.