Python itertools.résultats des combinaisons

Je ne reçois pas le nombre de résultats que je devrais obtenir à partir de cette fonction dans le titre, donc j'espère en votre aide.

en regardant les Docs http://docs.python.org/library/itertools.html#itertools.combinations le nombre de résultats doit être

le nombre d'articles retournés est n! / r! / (n-r)! quand 0 < = r n.

Et ça marche pour l'exemple, il

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

parce que n! / r! / (n-r)! = 4! / 2! / 2! = 6

Mais si j'essaie

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

j'ai ces 15 résultats. Mais n! / r! / (n-r)! = 6! / 3! / (6-3)! = 720 / 6 / 6 = 20

alors: les docteurs Python m'ont dit que je devrais avoir 20 résultats, mais j'en ai 15.

pouvez-vous m'aider à comprendre ce que je rate? Peut-être est quelque chose dans mes maths, car cette formule devrait être juste comme il est dans Wikipedia entrée d'une Combinaison

Merci, P.

9
demandé sur Paolo 2011-12-26 14:56:25

1 réponses

itertools.les combinaisons devraient renvoyer un itérateur avec 20 éléments:

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

Notez que

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

et la sortie posté

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

montre seulement les combinaisons de 2 lettres. Il semble que vous ayez calculé combinations('ABCDEF', 2), pas combinations('ABCDEF', 3).

22
répondu unutbu 2011-12-26 11:04:15