2014-02-25 31 views
4

重複計算的排列我有一個項目的兩個列表:沒有在Python

A = 'mno' 
B = 'xyz' 

我要生成所有排列,無需更換,以模擬B中的項目替換項目A的所有組合,沒有重複。例如

>>> do_my_permutation(A, B) 
['mno', 'xno', 'mxo', 'mnx', 'xyo', 'mxy', 'xyz', 'zno', 'mzo', 'mnz', ...] 

這是直接的足以讓我從頭開始寫,但我知道Python的starndard itertools module,我認爲可能已經實現了這一點。但是,我無法識別實現此確切行爲的函數。這個模塊中是否有一個函數可以用來實現這個功能?

+0

它看起來像你需要和itertools.permutations(做排列)和itertools的某種組合(咳嗽) 。產品(做替代)。我可能是錯的。沒時間測試。 –

回答

3

您正在查找itertools.permutations

從文檔:

元素被作爲唯一的治療基於自己的立場,而不是他們的價值。因此,如果輸入元素是唯一的,則不會有重複值。

7

這是你所需要的:

["".join(elem) for elem in itertools.permutations(A+B, 3)] 

,如果你想同三個字母的所有排序將被向下摺疊成一個單一的項目(與combinations取代permutations如讓'mxo''mox'做不是每個單獨出現在輸出中)。

+0

非常接近,但是這會產生很多重複,例如'mxo'和'xmo'。在我的情況下,訂單並不意味着唯一性。 – Cerin

0

只具有獨特的詞彙分類,排列,您可以使用此代碼:

import itertools 

A = 'mno' 
B = 'xyz' 

s= {"".join(sorted(elem)) for elem in itertools.permutations(A+B, 3)}