将字符串中的字符替换为另一个python

时间:2016-01-26 20:47:53

标签: python string

我在这里有2个样本DNA字符串:

text = "AANGCTWCAAGGT"
text1= "AAGTTTCG"

文本包含含糊不清的核苷酸和N'和' W'因为它们不是AGCT'(注意:任何不是AGCT'或' agct'的核苷酸被认为是含糊不清的)
这就是text1的目的,它不包含任何模糊的核苷酸,我想比较文本和text1并用text1替换文本中的模糊核苷酸。所以' N' =' G'和' W' =' C'根据他们的立场。

我的代码:

text = "AANGCTWCAAGGT"
text1= "AAGTTTCG"
m = len(text)
n = len(text1)
for j in range(n)[1:]:
if 'A' not in text[j] and 'G' not in text[j]and 'C' not in text[j]and 'T' not in text[j]and 'a' not in text[j]and 'g' not in text[j]and 'c' not in text[j]and 't' not in text[j]:
    newtext = text.replace(text[j], text1[j])
    print(newtext)

输出:

In[89]:runfile('C:/Users/..code')
AAGGCTWCAAGGT
AANGCTCCAAGGT

期望的输出:

AAGGCTCCAAGGT

我想我错过了什么,也许是其他循环?我不知道如何修复代码,以便将替换组合到最终输出中。

3 个答案:

答案 0 :(得分:1)

进行替换时,您使用的是文本,而不是新文本。因此,无论何时进行替换,newtext都会将其更改丢弃。每次进行替换时都需要使用newtext。或者您需要允许就地编辑。例如:

text = "AANGCTWCAAGGT"
t_list = [c for c in text]
text1= "AAGTTTCG"
m = len(text)
n = len(text1)
for j in range(1, n):
    if 'A' not in text[j] and 'G' not in text[j]and 'C' not in text[j] and 'T' not in text[j] and 'a' not in text[j]and 'g' not in text[j]and 'c' not in text[j]and 't' not in text[j]:
        t_list[j] = text1[j]

print("".join(t_list))

答案 1 :(得分:0)

怎么样:

text = "AANGCTWCAAGGT"
text1= "AAGTTTCG"

print ''.join(c if c.lower() in 'agct' else text1[i] for i,c in enumerate(text))

>> AAGGCTCCAAGGT

答案 2 :(得分:-1)

根据我在评论和问题中的理解,你会喜欢这样的东西(与yurib相同的算法答案,但是在一个循环中):

text = "AANGCTWCAAGGT"
text1= "AAGTTTCG"

res = ""
for i,c in enumerate(text):
    if c.lower() in 'agct':
        res = res +c
    else:
        res = res + text1[i]