我在这里有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
我想我错过了什么,也许是其他循环?我不知道如何修复代码,以便将替换组合到最终输出中。
答案 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]