2010-09-14 10 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 

usciteCome stampare ciò che penso sia un oggetto?

"generator object xuniqueCombinations at 0x020EBFA8" 

voglio vedere tutte le combinazioni che ha trovato. Come lo posso fare?

+2

due cose: http://docs.python.org/library/itertools.html e http://docs.python.org/glossary.html#term-generator – SilentGhost

risposta

16

leoluk è giusto, è necessario scorrere su di esso. Ma ecco la sintassi corretta:

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

In alternativa, è possibile convertirlo in un elenco prima:

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

Questo è un oggetto generatore. L'accesso è da iterando su di esso:

for x in xuniqueCombinations: 
    print x 
+0

per x in xuniqueCombinazioni: TypeError: oggetto 'function' non è iterable – Alex

+3

@Alex È necessario chiamare la funzione: 'per x in xuniqueCombinations (test, 3)'. In alternativa, basta 'stampare la lista (xuniqueCombinations (test, 3))'. –

+2

cercavi: for x in xuniqueCombinations (test, 3): – Alex

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

convertire il vostro generatore di elencare, e la stampa ......

+0

non mi piace questa risposta senza almeno un avviso circa le implicazioni della memoria. – Triptych

+0

ohh ok, ma se qualcuno esegue un oggetto loop over generator per la stampa senza convertirlo in lista, non può eseguire di nuovo il loop su di esso senza chiamare di nuovo quella funzione man mano che l'iteratore sarà esaurito .... – shahjapan

Problemi correlati