将字符串中的字符替换为另一个python
我这里有两个样本DNA字符串:将字符串中的字符替换为另一个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= "
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]