2017-04-14 58 views
-1

我生成的數字組合,例如123,使用此代碼生成具有repetetions組合在python

from itertools import combinations 
for i in set(combinations('123',2)): 
    print(''.join(i)) 

我獲得這裏所期望的輸出

13 
12 
23 

但是當我使用133,我得到

13 
33 

但我想忽略重複,我想輸出爲

13 
13 
33 

是否有任何替代方法?

+6

刪除'set'電話。那是什麼在減少'13 13 33'到'13 33' –

+1

那麼不要調用'set()'?我不明白你爲什麼需要調用'set()'。 – kennytm

+1

爲什麼如果你不想刪除repitition,你使用'set'? –

回答

1

set()本質上,不允許有任何重複的元素。 set()中的每個元素必須是唯一的。 Python文檔記錄了這一點:

Python還包含集合的數據類型。一組是無序集合,沒有重複元素

重點煤礦。這就是爲什麼你沒有得到你的預期產出。當您致電set()時,它會從您的組合中刪除重複13。相反,只是通過組合物作爲迭代是:

from itertools import combinations 

for i in combinations('133', 2): # no call to set() 
    print(''.join(i)) 

,輸出:

13 
13 
33 
1

這很簡單。你應該使用列表(組合('123',2))而不是設置。設置減少相同的值。

+2

或者根本* no *'list(..)','tuple(..)',...。 –

+0

你說得對。他可以刪除該集合,for循環將正確迭代。 – Erez

+0

有**不需要**來調用list()。事實上,如果你所做的只是循環,你想完全避免這種情況。 –