【问题标题】:Python itertools.combinations' resultsPython itertools.combinations 的结果
【发布时间】:2011-12-26 10:56:25
【问题描述】:

我没有在 Title 中得到应该从该函数获得的结果数量,因此希望得到您的帮助。

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

返回的项目数是 n! /r! /(n-r)!当 0 n 时为零。

它适用于那里的示例

组合('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 个。

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

谢谢, P.

【问题讨论】:

    标签: python combinations itertools


    【解决方案1】:

    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)

    【讨论】:

    • 你是对的。我的错。双重错误:一个是因为我写了“组合('ABCDEF',3)”,但我真的尝试使用 2 而不是 3。第二个错误肯定是我使用组合()的可迭代对象。谢谢:-)
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多