创建一个具有一个/多个字符替换的字符串列表

时间:2018-11-23 02:26:07

标签: python-3.x

如何从一个字符串创建一个完整的字符串列表,而列表中的每个字符串恰好包含一个字符替换?字符串本身仅由四个字符组成(例如: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个字符串。

有人可以帮忙吗?

2 个答案:

答案 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)