Python itertools.combinations的结果

时间:2011-12-26 10:56:25

标签: python combinations itertools

我没有得到我应该从标题中的该功能获得的结果数量,所以我希望得到你的帮助。

查看文档 http://docs.python.org/library/itertools.html#itertools.combinations 结果的数量应该是

  

返回的商品数量是n! / r! /(n-r)!当0 <= r <= n或   当r> 0时为零Ñ

它适用于那里的例子

  

组合('ABCD',2) - &gt; AB AC AD BC BD CD

因为n! / r! /(n-r)! = 4! / 2! / 2! = 6

但如果我尝试

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

我得到了15个结果。 但是n! / r! /(n-r)! = 6! / 3! /(6-3)! = 720/6/6 = 20

所以:Python Docs告诉我,我应该有20个结果,但我得到15个。

你能帮我理解我错过的东西吗?也许是我数学中的一些东西,因为那个公式应该是正确的,因为它在Wikipedia Combination entry

谢谢, P上。

1 个答案:

答案 0 :(得分:23)

itertools.combinations应该返回一个包含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)