2011-12-26 11 views
9

Nie otrzymam liczby wyników, które powinienem uzyskać z tej funkcji w tytule, więc mam nadzieję, że w twojej pomocy.Python itertools.combinations 'wyniki

Patrząc na Docs http://docs.python.org/library/itertools.html#itertools.combinations liczba wyników powinny być

Liczba pozycji zwrócony jest n!/r!/(n-r)! gdy 0 < = r < = n lub zero, gdy r> n.

A to działa na przykładzie tam

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

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

Ale jeśli próbuję

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

mogę dostać te 15 wyników. Ale n!/r!/(n-r)! = 6!/3!/(6-3)! = 720/6/6 = 20

Więc: Python Docs powiedział mi, że powinienem mieć 20 wyników, ale mam 15.

Czy możesz mi pomóc zrozumieć, co mi brakuje? Może jest coś w moim matematyki, jako że formuła powinna być w porządku, jak to jest w Wikipedia Combination entry

Dzięki, P.

Odpowiedz

21

itertools.combinations należy powrocie iterator z 20 elementów:

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

Zauważ, że

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

a wyjście pisał

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

pokazuje tylko kombinacje 2 liter. Wygląda na to, że obliczyłeś: combinations('ABCDEF', 2), a nie combinations('ABCDEF', 3).

+0

Masz rację. Moja wina. Podwójny błąd: jeden, ponieważ napisałem "kombinację (" ABCDEF ", 3)", ale naprawdę próbowałem z 2 zamiast 3. Drugi błąd jest na pewno z obiektem iterowanym, którego używam z kombinacjami(). Dzięki :-) – Paolo