2011-12-26 11 views
9

No obtengo el número de resultados que debo obtener de esa función en el Título, así que espero su ayuda.Resultados de Python itertools.combinations

Mirando el Docs http://docs.python.org/library/itertools.html#itertools.combinations el número de resultados debe ser

El número de artículos devueltos es n!/r!/(n-r)! cuando 0 < = r < = n o cero cuando r> n.

Y funciona para el ejemplo de allí

combinaciones ('ABCD', 2) -> AB AC AD BC BD CD

porque n!/r!/(n-r)! = 4!/2!/2! = 6

Pero si intento

combinations('ABCDEF', 3) --> AB AC AD AE AF BC BD BE BF CD CE CF DE DF EF 

saco esos 15 resultados. ¡Pero n!/r!/(n-r)! = 6!/3!/(6-3)! = 720/6/6 = 20

Así: la documentación de Python me dijo que yo debería tener 20 resultados, pero me da 15.

Puede usted por favor me ayude a entender lo que me falta? Tal vez es algo en mis matemáticas, como la fórmula debe ser correcta, ya que se encuentra en la Wikipedia Combination entry

Gracias, P.

Respuesta

21

itertools.combinations deben devolver un iterador con 20 artículos:

In [40]: len(list(itertools.combinations('ABCDEF',3))) 
Out[40]: 20 
Tenga en cuenta que

In [41]: len(list(itertools.combinations('ABCDEF',2))) 
Out[41]: 15 

y la salida publicada

combinations('ABCDEF', 3) --> AB AC AD AE AF BC BD BE BF CD CE CF DE DF EF 

muestra solo combinaciones de 2 letras. Por lo tanto, parece que ha calculado combinations('ABCDEF', 2), no combinations('ABCDEF', 3).

+0

Tienes razón. Mi culpa. Doble error: uno porque escribí "combinación ('ABCDEF', 3)" pero realmente probé con 2 en lugar de 3. El segundo error es seguro con el objeto iterable que estoy usando con combinaciones(). Gracias :-) – Paolo

Cuestiones relacionadas