![](/img/trans.png)
[英]itertools.combinations_with_replacement() with regard to ordering
[英]While generating all possible combinations itertools.combinations_with_replacement() vs itertools.product()?
在編寫一個程序來查找列表的所有不同組合時,我發現了很多關於使用intertools.product()
而不是intertools.combinations_with_replacement()
的線程,就像我一直在做的那樣。 沒有人解釋為什么你應該使用 intertools.product。 我很想知道這如何影響我的程序輸出。
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.