2017-07-15 46 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