我有一个字符串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等
解决此问题的最佳方法是什么?
答案 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