Я пытаюсь написать рекурсивную функцию, которая принимает в качестве входных данных целое число n
и список l
и возвращает список всех комбинаций размера n, которые можно выбрать из элементов l
. Я знаю, что могу просто использовать itertools, но я хочу стать лучше в написании рекурсивных функций, и я верю, что написание собственной функции поможет мне.
Так, например, если вы введете:
n = 3
l = [1, 2, 3, 4]
Я хочу вывод:
`[[1, 2, 3], [1, 3, 4], [2, 3, 4], [1, 2, 4]]
Пока я написал этот код:
def get_combinations(l, n): # returns the possible combinations of size n from a list of chars
if len(l) == 0:
return []
elif n == 1:
return [l[0]]
newList = list()
for i in range(len(l)):
sliced_list = l[i:]
m = n - 1
#lost here, believe I need to make a recursive call somewhere with get_combinations(sliced_list, m)
return newList
Я нашел этот пример такой функции для перестановок полезным, но я изо всех сил пытаюсь реализовать нечто подобное.
Чтобы уточнить, я настроил свои базовые случаи так, как я это сделал, потому что я ожидаю передать sliced_list
и m
в моем рекурсивном вызове, и если вы представите ситуацию, когда i = 3
, вы будете у вас есть пустой список для sliced_list
, и m
будет равен 1, когда вы ушли достаточно глубоко, чтобы создать комбинацию. Но я не женат на этих базовых случаях.
Позвольте мне попытаться обобщить мои вопросы:
Как получить окончательный результат, который представляет собой список списков, а не список списков списков ... (глубина = n)?
Как должен выглядеть мой рекурсивный вызов?
Я иду об этой проблеме совершенно неправильно?