Python itertools.combinations 的结果
我不明白从这个函数得到的结果数量为什么和标题里说的不一样,所以希望你们能帮帮我。
根据文档,http://docs.python.org/library/itertools.html#itertools.combinations,结果的数量应该是:
返回的项目数量是 n! / r! / (n-r)!,当 0 <= r <= n 时有效,或者当 r > n 时结果为零。
这个公式在文档中的例子是有效的:
combinations('ABCD', 2) --> 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文档告诉我应该有20个结果,但我只得到了15个。
你能帮我理解我哪里出错了吗?也许是我的数学有问题,因为这个公式在维基百科的组合条目里也是对的。
谢谢,
P.
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)
。