使用Python生成两个字符串的组合

时间:2013-11-24 14:37:43

标签: python string concatenation combinations permutation

我有一个字符串str1 =“ABC”,我需要在字符串str1中向len(str1)数字“x”插入0,除了在最后一个位置。

所以在上面的例子中,我希望在字符串之前或之内放置一个0到2“x”的结果列表,看起来像

["ABC",
 "xABC",
 "AxBC",
 "ABxC",
 "xxABC",
 "xAxBC",
 "xABxC",
 "AxxBC",
 "AxBxC",
 "ABxxC"]

我尝试了一些代码如下(我确实发现我错过了几个组合):

>>> for i in range(1, len(str1)):
...     for k in range(len(str1)):
...         str1[:k]+"x"*i+str1[k:]
... 
'xABC'
'AxBC'
'ABxC'
'xxABC'
'AxxBC'
'ABxxC'
>>> 

我不确定如何处理其他情况,例如两者之间的间隔,例如xAxBC等

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

使用itertools.combinations_with_replacement获取索引以插入x s。:

import itertools

str1 = "ABC"
lst = list(str1)
for n in range(len(str1)):
    for idxs in itertools.combinations_with_replacement(range(len(str1)), n):
        xs = lst[:]
        for i in reversed(idxs): # Use reversed, otherwise index become invald
            xs.insert(i, 'x')
        print(''.join(xs))

输出:

ABC
xABC
AxBC
ABxC
xxABC
xAxBC
xABxC
AxxBC
AxBxC
ABxxC