【问题标题】:While generating all possible combinations itertools.combinations_with_replacement() vs itertools.product()?在生成所有可能的组合时 itertools.combinations_with_replacement() vs itertools.product()?
【发布时间】:2014-01-20 00:51:37
【问题描述】:

在编写一个查找列表的所有不同组合的程序时,我发现了很多关于使用intertools.product() 而不是intertools.combinations_with_replacement() 的线程,就像我一直在做的那样。没有人解释为什么你应该使用 intertools.product。我很想知道这对我的程序输出有何影响。

【问题讨论】:

    标签: python python-3.x python-3.3


    【解决方案1】:

    From Python documentation

    itertools.product(*iterables[, 重复])

    输入迭代的笛卡尔积。

    相当于生成器表达式中的嵌套 for 循环。例如, product(A, B) 返回的结果与 ((x,y) for x in A for y in B) 相同。

    换句话说:

    for x, y in itertools.product(A, B):
    

    替换

    for x in A:
        for y in B:
    ............
    

    编辑:

    • itertolls.combinations_with_replacement() 将采用单个可迭代对象并生成其给定长度的元素的所有可能组合;

    • itertools.product() 将生成来自多个可迭代对象的值组合,其中结果元组的元素 0 来自 第一个可迭代的,元素 1 - 从第二个等。

    【讨论】:

    • 虽然正确并且肯定比当前接受的答案更好,但这并不能回答它与 combinations_with_replacement 的比较,这是明确的问题。
    • @KillianDS,引用 OP 没有人解释为什么你应该使用 intertools.product。但我会详细说明
    • @KillianDS,顺便说一句,接受的答案完全是错误和误导
    • 这非常有帮助。我用这个修复了我的程序。非常感谢!
    【解决方案2】:

    这段代码可以帮助你理解。

    from itertools import combinations_with_replacement
    from itertools import product
    
    string = input()
    
    for ele in list(combinations_with_replacement(string,2)):
        print("".join(ele), end=' ')
    
    print()
    
    prod = list(product(string,repeat = 2))
    for ele in prod:
        print("".join(ele), end=' ')
    

    输入

    ABCD
    

    输出

    AA AB AC AD BB BC BD CC CD DD 
    AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD 
    

    编辑:

    如您所见,combinations_with_replacement() 的输出会生成从第一个到最后一个元素的所有可能组合,即“AA AB AC AD”,然后它会生成剩余元素与第二个到最后一个元素的所有可能组合即“BB BC BD”请注意,它不会从第二个元素返回到第一个元素。 在 product() 的情况下,生成的输出是从第一个元素到第二个元素以及从第二个到第一个,即 AB 和 BA,这一直持续到迭代结束。

    【讨论】:

    • 嗨@RajatTarade 欢迎来到SO。不确定是否仅通过发布代码来解释这两个函数之间的差异。好的答案通常带有详细或简洁的解释,而不仅仅是代码
    猜你喜欢
    • 2016-01-07
    • 2022-01-18
    • 2022-08-22
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多