2017-08-30 137 views
-1

我一直在試圖創建一個腳本,其中列表的每個可能的組合都將被打印[其中(1,2)和(2,1)將被計數爲不同的條目]。 例如:在列表中生成元素的所有可能組合

c = [1,2] 
# do something magical 
print(c with magical stuff) 
>>>[(1), (2), (1, 1), (1, 2), (2, 1), (2, 2)] 

我試過和itertools.permutations。它顯示輸出爲>>>()(1,)(2,)(1,2)(2,1)。但是,它不包括(1,1)和(2,2)

任何幫助將非常感激。我是新來的編碼(我在打印非常流暢,雖然的 「Hello World!」:3)

+6

但是您顯示的輸出_does_都包含'(1,2)'和'(2,1)'。 – khelwood

+0

[如何在Python中生成列表的所有排列]可能的重複(https://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list-in-python) –

回答

1

工作對我來說:

c = [1,2] 
for i in itertools.permutations(c): 
    print i 

產生

(1, 2) 
(2, 1) 
+0

謝謝。它的確如此。但是,它並沒有將(1,1)和(2,2)等所有元素結合起來。對於令人困惑的標題感到抱歉。 –

3

嘗試itertools.product

def foo(l): 
    yield from itertools.product(l) 
    yield from itertools.product(l, l) 

for x in foo([1, 2]): 
    print(x) 

(1,) 
(2,) 
(1, 1) 
(1, 2) 
(2, 1) 
(2, 2) 

請注意,yield from語法可從python3.3開始使用。

+0

謝謝你,先生。這正是我想要的。 –

1

可能有一些內置(或更可能是numpy)的包可以爲你做到這一點,但它是一個很好的練習自己做。

有一個問題 - 你對長度2置換感興趣嗎?或者你想寫一個任意長排列的函數嗎?

此外,見:How to generate all permutations of a list in Python

+0

這並沒有真正回答這個問題。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ然而,它顯示,他是值得*評論*所需的50名代表。這就是我反正提高的原因。但Coldspeed是對的Mike。這將作爲評論更合適,而不是回答。 –

+0

不能確定是否適合編碼初學者的例子,選擇提供一些高層次的想法 –

0

請與更換組合,然後置換的結果,只保留獨特的效果。

import itertools as it 


combs = it.chain.from_iterable(it.combinations_with_replacement(c, i) for i in range(1,3)) 
perms = it.chain.from_iterable([set(it.permutations(i)) for i in combs]) 
list(perms) 
# [(1,), (2,), (1, 1), (1, 2), (2, 1), (2, 2)] 
相關問題