如何从一个字符串创建一个完整的字符串列表,而列表中的每个字符串恰好包含一个字符替换?字符串本身仅由四个字符组成(例如:A,B,C和D),因此长度为n的字符串的整个列表将包含3n + 1个字符串,并且只替换了一个字符。
示例: inputstr ='ABCD' 输出= ['ABCD','BBCD','CBCD','DBCD','AACD','ACCD','ADCD','ABAD','ABBD','ABDD','ABCA','ABCB' ,“ ABCC”]
我编写以下python代码:
strin = 'ABCD'
strout = set()
tempstr1 = ''
tempstr2 = ''
tempstr3 = ''
tempstr4 = ''
for base in range(len(strin)):
if strin[base] == 'A': #this block will be repeated for char B, C and D
tempstr1 = strin.replace(strin[base], 'A')
strout.add(tempstr1)
tempstr1 = ''
tempstr2 = strin.replace(strin[base], 'B')
strout.add(tempstr2)
tempstr2 = ''
tempstr3 = strin.replace(strin[base], 'C')
strout.add(tempseq3)
tempstr3 = ''
tempstr4 = strin.replace(strin[base], 'D')
strout.add(tempseq4)
tempstr4 = ''
return strout
,只要没有重复的字符(例如“ ABCD”),它就可以正常工作。但是,当输入字符串包含重复的字符(例如“ AACD”)时,它将返回少于3n + 1的字符串。我尝试使用“ AACD”字符串,它只返回10个而不是13个字符串。
有人可以帮忙吗?
答案 0 :(得分:0)
更改
strout = set() ===> strout = list()
答案 1 :(得分:0)
我找到了。我使用了一种切片方法来创建一个字符串列表,其中包含一个替换项。
int f ()
{
. . .
}
int g;
int main()
{
. . .
if (f) {
// this is actually true
}
}
然后,我过滤掉所有比原始字符串长的x替换字符串:
f;
g;
然后,我将x更改为任何替换字符:
for i in range(len(seq)):
seqxlist.append(seq[:i] + 'x' + seq[i+1:])
这将创建所有可能的字符串替换组合,但仍包含重复项。要删除重复项,请在seqxlist = [x for x in seqxlist if (len(x) == len(seq))]
列表中使用for m in seqxlist:
tempseq1 = m.replace('x', 'A')
outseq.append(tempseq1)
tempseq2 = m.replace('x', 'B')
outseq.append(tempseq2)
tempseq3 = m.replace('x', 'C')
outseq.append(tempseq3)
tempseq4 = m.replace('x', 'D')
outseq.append(tempseq4)
。