簡體   English   中英

在生成所有可能的組合時 itertools.combinations_with_replacement() 還是 itertools.product()?

[英]While generating all possible combinations itertools.combinations_with_replacement() vs itertools.product()?

在編寫一個程序來查找列表的所有不同組合時,我發現了很多關於使用intertools.product()而不是intertools.combinations_with_replacement()的線程,就像我一直在做的那樣。 沒有人解釋為什么你應該使用 intertools.product。 我很想知道這如何影響我的程序輸出。

來自 Python 文檔

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 - 來自第二個等等。

這段代碼將幫助您理解。

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 這一直持續到迭代結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM