2016-06-17 10 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)) 

Kürzlich fand ich diesen Code im Internet. Es funktioniert sehr gut. Ich weiß jedoch nicht, wie das funktioniert, also kann mir jemand sagen, wie es funktioniert? Und wie kann man einen rekursiven Code schnell verstehen? Vielen DankEine Kombination Algorithmus in Python

+1

SO ist keine Nachhilfe Bedienung. Auch Sie sagen nicht einmal, was der Code tun soll. – Julien

+0

Es gibt eine Standardimplementierung für 'Kombinationen' im' itertools' Modul. Der eine, den Sie gefunden haben, verwendet eine innere rekursive Funktion, um die Kombinationen zu erstellen. Versuchen Sie, die Zwischenergebnisse auszudrucken, um zu sehen, was passiert. – AChampion

+0

Dies ist nicht wirklich rekursiv, es ist iterativ. –

Antwort

1

Wie @AChampion sagte, Sie könnten auch die Kombinationen mit der itertools Bibliothek erhalten, die viel einfacher zu verstehen ist:

import itertools 

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

Ausgang:

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

Vielen Dank –

+0

Ja, keine Sorge @Chester. Y. Wenn Ihnen diese Antwort gefallen hat, geben Sie ihr einen Daumen hoch. – RoadRunner

+0

Auch als richtige Antwort für zukünftige Zuschauer markieren. – RoadRunner