2016-06-17 4 views
0
import copy 

def combine(l, n): 
    answers = [] 
    one = [0] * n 
    def next_c(li = 0, ni = 0): 
     if ni == n: 
      answers.append(copy.copy(one)) 
      return 
     for k in range(li, len(l)): 
      one[ni] = l[k] 
      next_c(k+1, ni+1) 
    next_c() 
    return answers 

print(combine([1,2,3,4],2)) 

Недавно я нашел этот код в Интернете. Он работает очень хорошо. Однако я не знаю подробностей о том, как это работает? Так кто-нибудь может сказать мне, как это работает? И как быстро понять рекурсивный код? Большое спасибоКомбинированный алгоритм в python

+1

SO не репетиторство оказание услуг. Также вы даже не говорите, что должен делать код. – Julien

+0

Существует стандартная реализация для 'комбинаций' в модуле' itertools'. Тот, который вы нашли, использует внутреннюю рекурсивную функцию для создания комбинаций. Попробуйте распечатать промежуточные результаты, чтобы увидеть, что происходит. – AChampion

+0

На самом деле это даже не рекурсивно, это итеративно. –

ответ

1

Как @AChampion сказал, Вы также можете получить комбинации с библиотекой itertools, что гораздо легче понять:

import itertools 

def combine2(lst, n): 
    return [list(x) for x in itertools.combinations(lst, n)] 

Выход:

>>> combine2([1,2,3,4],2) 
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]] 
+0

Большое спасибо –

+0

Да, не стоит беспокоиться @Chester. Y. Если вам понравился этот ответ, не забудьте дать ему большие пальцы. – RoadRunner

+0

Также отметьте его как правильный ответ для будущих зрителей. – RoadRunner

Смежные вопросы