11

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

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

返回的项目数是 n! /r!/(NR)!当 0 <= r <= n 或 r > n 时为零。

它适用于那里的例子

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

因为n!/r!/(NR)!= 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!/(NR)!= 6!/3!/(6-3)!= 720 / 6 / 6 = 20

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

你能帮我理解我错过了什么吗?也许是我的数学中的东西,因为该公式应该是正确的,因为它在维基百科组合条目中

谢谢,P。

4

1 回答 1

22

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)

于 2011-12-26T11:04:15.593 回答