做出可能的组合?

时间:2017-07-15 15:08:37

标签: python python-3.x combinations itertools

我正在努力制作'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 个答案:

答案 0 :(得分:2)

您正在寻找的itertools工具是product

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

这将给出长度为2的指定元素的所有可能排列(由repeat关键字指定)。 permutationscombinations explicitly state都不重复元素。 函数itertools.combinations_with_replacement接近你想要的,它允许重复的元素,但只给出不同的组合,而不是所有的排列。函数itertools.permutations_with_replacement不存在,因为这正是itertools.product给你的。

答案 1 :(得分:1)

除了Nielson添加的内容之外,您还可以在不使用itertools的情况下获得所需的结果,

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

这将产生所需的输出。