2010-09-14 15 views
11
test = ["a","b","c","d","e"] 

def xuniqueCombinations(items, n): 
    if n==0: yield [] 
    else: 
     for i in xrange(len(items)-n+1): 
      for cc in xuniqueCombinations(items[i+1:],n-1): 
       yield [items[i]]+cc 

x = xuniqueCombinations(test, 3) 
print x 

AusgängeWie drucke ich ein Objekt aus?

"generator object xuniqueCombinations at 0x020EBFA8" 

ich alle Kombinationen sehen wollen, dass es gefunden. Wie kann ich das machen?

+2

zwei Dinge: http://docs.python.org/library/itertools.html und http://docs.python.org/glossary.html#term-generator – SilentGhost

Antwort

16

leoluk richtig ist, müssen Sie iteriere darüber. Aber hier ist die richtige Syntax:

combos = xuniqueCombinations(test, 3) 
for x in combos: 
    print x 

Alternativ Sie es in eine Liste umwandeln kann zuerst:

combos = list(xuniqueCombinations(test, 3)) 
print combos 
4

Dies ist ein Generatorobjekt. Zugang durch über sie iterieren:

for x in xuniqueCombinations: 
    print x 
+0

für x in xuniqueCombinations: TypeError: 'Funktion' Objekt ist nicht iterierbar – Alex

+3

@Alex Sie müssen die Funktion aufrufen: 'für x in xuniqueCombinations (test, 3)'. Alternativ einfach 'print list (xuniqueCombinations (test, 3))'. –

+2

Sie nach: für x in xuniqueCombinations (Test 3): – Alex

0
x = list(xuniqueCombinations(test, 3)) 
print x 

Ihr Generator konvertieren zur Liste und drucken ......

+0

Kocht diese Antwort nicht zumindest eine Warnung, ohne sich um die Implikationen des Gedächtnisses. – Triptych

+0

ohh ok, aber wenn jemand eine Schleife über Generatorobjekt zum Drucken ausführt, ohne es in eine Liste zu konvertieren, kann er keine Schleife mehr ausführen, ohne diese Funktion erneut aufzurufen, da der Iterator erschöpft ist .... – shahjapan