Итоги Python - PullRequest
       23

Итоги Python

10 голосов
/ 26 декабря 2011

Я не получаю количество результатов, которые я должен получить от этой функции в заголовке, поэтому я надеюсь на вашу помощь.

Глядя на документы http://docs.python.org/library/itertools.html#itertools.combinations количестворезультаты должны быть

Количество возвращенных элементов равно n!/ р!/ (№)!когда 0 <= r <= n или ноль, когда r> n.

И это работает для примера там

комбинаций ('ABCD', 2) --> AB AC AD BC BD CD

потому что n!/ р!/ (№)!= 4!/ 2!/ 2!= 6

Но если я попробую

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

, я получу эти 15 результатов.Но п!/ р!/ (№)!= 6!/ 3!/ (6-3)!= 720/6/6 = 20

Итак: Документы Python сказали мне, что у меня должно быть 20 результатов, но я получаю 15.

Можете ли вы помочь мне понять, что мне не хватает?Может быть, это что-то в моей математике, так как эта формула должна быть правильной, как в записи Wikipedia Combination

Спасибо, P.

1 Ответ

23 голосов
/ 26 декабря 2011

itertools.combination должен возвращать итератор с 20 элементами:

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

Обратите внимание, что

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

, а выходные данные

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

показывают толькокомбинации из 2 букв.Похоже, вы вычислили combinations('ABCDEF', 2), а не combinations('ABCDEF', 3).

...