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

将字符串中的字符替换为另一个python,python,string,Python,String,我这里有两个样本DNA字符串: text = "AANGCTWCAAGGT" text1= "AAGTTTCG" 文本包含模棱两可的核苷酸“N”和“W”,因为它们不是“AGCT”(注:任何不是“AGCT”或“AGCT”的核苷酸都被视为模棱两可) 这就是text1的目的,它不包含任何模棱两可的核苷酸,我想比较text和text1,用text1替换text中模棱两可的核苷酸。所以‘N’=‘G’和‘W’=‘C’基于它们的位置 我的代码: text = "AANGCTWCAAGGT" text1= "

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

text = "AANGCTWCAAGGT"
text1= "AAGTTTCG"
文本包含模棱两可的核苷酸“N”和“W”,因为它们不是“AGCT”(注:任何不是“AGCT”或“AGCT”的核苷酸都被视为模棱两可)
这就是text1的目的,它不包含任何模棱两可的核苷酸,我想比较text和text1,用text1替换text中模棱两可的核苷酸。所以‘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
我想我错过了什么,也许是另一个循环?我不确定如何修复代码,以便将替换内容合并到最终输出中

那么:

text = "AANGCTWCAAGGT"
text1= "AAGTTTCG"

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

>> AAGGCTCCAAGGT

替换时使用的是文本而不是新文本。因此,每当您进行替换时,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))

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


首先(当你发布问题时,这很可能是一个抄写错误),但是你的循环没有做任何事情。如果
if
应该在循环中吗?那么'N'='G'和'W'='C'你能澄清一下这里的逻辑吗?@Linuxios如果循环应该告诉我们一个核苷酸是否是不明确的,我的实际DNA序列包含更多不明确的核苷酸,而不仅仅是文本和文本1比较中的'NW'@wim,文本中的“N”应该是文本1中的“G”,文本中的“W”应该是文本1中的“C”。是的,我看到了,但为什么?是因为他们在同一个位置吗?text1比text短,所以这似乎很脆弱。上面的字符串只是示例字符串,实际字符串包含除“NW”以外的不明确核苷酸。Jessica不容易调整它以适用于其他“核苷酸”?将
'NW'
更改为包含所有其他内容?@yurib他们总是不同的,我没有办法告诉@yurib如果一个核苷酸不等于'AGCTagct',那么说起来就容易多了@Jessica抱歉,但是如果你没有办法告诉我,我们会怎么做?我可能不完全理解这个问题,但是,如果text1的长度之外存在歧义(例如“N”),代码中会发生什么情况呢。似乎它可能是一个索引error@GarrettR你说得对,但问题中没有具体说明这个约束。根据我所理解的,听起来很奇怪,模棱两可的核苷酸恰好只存在于两个字符串的公共部分,或者如果没有模棱两可的核苷酸,就不可能得出一个结果,不是吗?我错过什么了吗?
text = "AANGCTWCAAGGT"
text1= "AAGTTTCG"

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