Вы почти у цели, только несколько незначительных вещей. Алгоритм в основном правильный, но
if k == len(lst):
return lst
Это неправильный тип. Тип возвращаемого значения - это не список вещь , а список (список вещь ), поэтому он должен быть
if k == len(lst):
return [lst]
Далее
if k == 0:
return []
Каждый список имеет ровно один непустой подсписок, пустой список, так что должно быть
if k == 0:
return [[]]
Для остальных
if k > len(lst):
return []
полностью правильно.
sets=[]
sub_lst=lst[:]
sub_lst.remove(sub_lst[0])
Это правильно, но можно выразить более кратко, как
sub_lst = lst[1:]
Теперь еще один тип смешивания:
a= choose_sets(sub_lst,k-1)
for i in a:
i.append(lst[0])
sets.append(a)
То, что sets.append(a)
помещает a
в один слот из sets
, вы хотите объединить два списка, sets = sets + a
. И если вам нужны комбинации в порядке, в котором элементы появляются в списке, вместо i.append(lst[0])
, вы должны добавить [lst[0]] + i
к sets
в цикле, но это вопрос склонности.
b= choose_sets(sub_lst,k)
sets.append(b)
Опять не добавляйте, а объединяйте здесь,
sets = sets + b