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

salidas¿Cómo imprimir lo que creo que es un objeto?

"generator object xuniqueCombinations at 0x020EBFA8" 

Quiero ver todas las combinaciones que se ha encontrado. ¿Cómo puedo hacer eso?

+2

dos cosas: http://docs.python.org/library/itertools.html y http://docs.python.org/glossary.html#term-generator – SilentGhost

Respuesta

16

leoluk es correcta, es necesario iterar sobre eso. Pero aquí está la sintaxis correcta:

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

Alternativamente, puede convertir a una lista en primer lugar:

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

Este es un objeto generador. Puede acceder a él mediante una iteración sobre ella:

for x in xuniqueCombinations: 
    print x 
+0

para X en xuniqueCombinations: TypeError: objeto 'función' no es iterable – Alex

+3

@Alex Debe llamar a la función: 'para x en xuniqueCombinations (prueba, 3)'. Alternativamente, simplemente haga 'print list (xuniqueCombinations (test, 3))'. –

+2

decir: para x en xuniqueCombinations (prueba 3): – Alex

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

convertir su generador para listar e imprimir ......

+0

No me gusta esta respuesta sin al menos una advertencia acerca las implicaciones de memoria. – Triptych

+0

ohh vale, pero si alguien ejecuta el bucle sobre el objeto del generador para imprimir sin convertirlo a la lista, no puede ejecutar el bucle otra vez sin llamar a esa función de nuevo ya que el iterador se agotará ... – shahjapan

Cuestiones relacionadas