2017-07-15 84 views
1

我試圖使'AB'可能的組合,如:可能的組合?

[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]. 

我使用itertools.permutations,但它只是返回,[('A', 'B'), ('B', 'A')]

會是什麼程序,同時擁有('A','A')('B','B')了。

此外,我在這裏與輸入'AB'交談。如果我必須對輸入'AB','BA'進行組合,使輸出爲[('AB','AB'), ('AB, 'BA'), ('BA', 'BA'), ('BA','BA']),那麼該過程會是什麼。

此外,我不擔心順序。

回答

2

您正在尋找itertools的工具是product

>>> list(itertools.product('AB', repeat=2)) 
[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')] 

這會給指定的元素是長度爲2(由repeat關鍵字指定)的所有可能的安排。 permutationscombinationsexplicitly state它們不重複元素。 功能itertools.combinations_with_replacement接近你想要的,它允許重複的元素,但只給出不同的組合,而不是所有的排列。功能itertools.permutations_with_replacement不存在,因爲這正是itertools.product給你的。

+0

謝謝K.尼爾森的指導。 itertools.product正常工作的輸入'AB' – engqureshi

1

除了尼爾森添加了什麼,你也能獲得所需的結果,而無需使用itertools

x = 'AB' 
l = [(a, b) for a in x for b in x] 

這將產生所需的輸出。

+0

感謝Pawan的幫助。是的,它和itertools一樣。 – engqureshi