2016-10-27 90 views
0

我正在使用Python(2.7.2),我需要從列表中不重複的所有排列。更確切地說,python itertools雙元素排列

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

正確給

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

但現在我正在尋找的東西會做以下

for i in myfunction([1,2,2]): print i 
(1,2,2) 
(2,2,1) 
(2,1,2) 

而itertools將使該列表兩次(或者,對於([ 1,1,1])作爲輸入,它只是重複六次)。 這基本上是itertools.permutations和itertools.combinations之間的東西。 我嘗試過使用套件,但是我嘗試過的所有解決方案總是會產生新問題,並且從未匹配所需的輸出。

+1

你就不能通過'set'過濾結果? '爲我在集(itertools.permutations([1,2,2])):打印我' –

+0

工程。謝謝,不知何故,一開始就沒有達到目標,最終導致了複雜的解決方案。 – Eulenfuchswiesel

+1

有一種有效的方法可以在[我的這個舊的答案]中做到這一點(http://stackoverflow.com/a/31678111/4014959) –

回答

1

它看起來像你想要的設置。

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

其中給出:

{(1, 2, 2), (2, 2, 1), (2, 1, 2)} 

另外,沒有對象保存到一個變量:

for i in set(itertools.permutations([1,2,2])): 
    print(i) 
+1

是否有任何理由不直接插入設置?清單的目的是什麼? –

+0

我編輯了我的回覆以包含直接方法,但其原因是要顯示如何使對象保留所需的信息。 – Andy

+0

爲什麼你需要保存對象? –