我正在努力制作'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'])
,那么该过程会是什么。
另外,我不担心订单。
答案 0 :(得分:2)
您正在寻找的itertools工具是product
。
>>> list(itertools.product('AB', repeat=2))
[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]
这将给出长度为2的指定元素的所有可能排列(由repeat
关键字指定)。
permutations
和combinations
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]
这将产生所需的输出。