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

使用Python生成两个字符串的组合,python,string,concatenation,combinations,permutation,Python,String,Concatenation,Combinations,Permutation,我有一个字符串str1=“ABC”,我需要在字符串str1中插入0到len(str1)个“x”,除了最后一个位置 在上面的例子中,我想要一个0到2“x”的结果列表,放在字符串的前面或里面 ["ABC", "xABC", "AxBC", "ABxC", "xxABC", "xAxBC", "xABxC", "AxxBC", "AxBxC", "ABxxC"] 我尝试了一些代码,如下所示(我确实意识到我遗漏了一些组合): 我真的不确定如何处理另一个案例,例如xAxBC等 解决此问

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

在上面的例子中,我想要一个0到2“x”的结果列表,放在字符串的前面或里面

["ABC",
 "xABC",
 "AxBC",
 "ABxC",
 "xxABC",
 "xAxBC",
 "xABxC",
 "AxxBC",
 "AxBxC",
 "ABxxC"]
我尝试了一些代码,如下所示(我确实意识到我遗漏了一些组合):

我真的不确定如何处理另一个案例,例如xAxBC等

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

使用获取要插入的索引
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
用于获取要插入的索引
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

可能与@alko重复感谢您指出这一点。但是问题不一样。@alko的可能重复。谢谢你指出这一点。但是问题不一样。哇,你太快了,我花了这么长时间才找到它的名字。这是参考资料:谢谢你的回答!虽然这对于长度高达10-15的字符串似乎效果很好,但对于较大的数字来说,它的速度会非常慢。有什么办法可以加快速度吗?比如回忆录?我尝试了一些在开始添加x时重复的行(xABC、AxBC、ABxC),比如xxABC、xAxBC、xABxC。哇,你太快了,我花了这么长时间才找到它的名称。这是参考资料:谢谢你的回答!虽然这对于长度高达10-15的字符串似乎效果很好,但对于较大的数字来说,它的速度会非常慢。有什么办法可以加快速度吗?比如回忆录?我尝试了一些行(xABC、AxBC、ABxC),当在开始添加x时,它们会重复,比如xxABC、xAxBC、xABxC。