我想找出一種方法來產生一個字符串有一個重複的字符,但不產生重複的元組的所有可能的排列組合。如何生成排列而不產生重複的結果,但具有固定數量的字符Python
現在我正在使用itertools.permutations()
。它的作品,但我需要刪除重複和我不能使用set()
刪除重複。
我期待什麼樣的結果?那麼,例如,我想要得到DDRR
的所有組合,itertools.permutations()
的東西是我會得到DDRR
大約四次,因爲itertools
看到D
s就好像它們不同,與R
相同。
隨着list(itertools.permutations('DDRR'))
我得到:
[('D', 'D', 'R', 'R'), ('D', 'D', 'R', 'R'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('D', 'D', 'R', 'R'), ('D', 'D', 'R', 'R'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'R', 'D', 'D'), ('R', 'R', 'D', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'R', 'D', 'D'), ('R', 'R', 'D', 'D')]
理想的結果,我想要的是:
[('D', 'R', 'R', 'D'), ('R', 'D', 'R', 'D'), ('R', 'R', 'D', 'D'), ('D', 'R', 'D', 'R'), ('D', 'D', 'R', 'R'), ('R', 'D', 'D', 'R')]
爲什麼你不能使用'set'?它有什麼不好? – 2016-07-23 17:26:28
因爲我收到內存錯誤。我正在使用非常非常長的字符串。 –
這是一個設計選擇,有一些解決方法,請參閱:http://stackoverflow.com/questions/6534430/why-does-pythons-itertools-permutations-contain-duplicates-when-the-original – ifma