使用python计算值之间的距离
我是python新手,希望能得到一些帮助 我有一个脚本,它在一个序列中每三个碱基计数一次,直到识别出一个终止密码子,然后断开并返回值。这适用于每个读取帧0、+1、+2 我希望它返回一个值0,如果脚本运行到序列的末尾,那么在识别终止密码子之前。此时,脚本为count0返回18,当序列在找到“TAG”或“TAA”之前结束时,count0应为0 任何帮助都将不胜感激使用python计算值之间的距离,python,bioinformatics,Python,Bioinformatics,我是python新手,希望能得到一些帮助 我有一个脚本,它在一个序列中每三个碱基计数一次,直到识别出一个终止密码子,然后断开并返回值。这适用于每个读取帧0、+1、+2 我希望它返回一个值0,如果脚本运行到序列的末尾,那么在识别终止密码子之前。此时,脚本为count0返回18,当序列在找到“TAG”或“TAA”之前结束时,count0应为0 任何帮助都将不胜感激 seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG" stop_co
seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG"
stop_codons = ["TAG", "TAA"]
count0 = 0
n = 0
while n < len(seq):
if seq[n:n+3] in stop_codons:
break
count0 += 1
n += 3
print count0
count1 = 0
n = 1
while n < len(seq):
if seq[n:n+3] in stop_codons:
break
count1 += 1
n += 3
print count1
count2 = 0
n = 2
while n < len(seq):
if seq[n:n+3] in stop_codons:
break
count2 += 1
n += 3
print count2
一个简单的解决方法就是这样做。不过,你应该考虑重构你的代码。
stop_codons = ["TAG", "TAA"]
count0 = 0
n = 0
found = False
while n < len(seq):
if seq[n:n+3] in stop_codons:
found = True
break
count0 += 1
n += 3
if not found:
count0 = 0
stop_密码子=[“TAG”,“TAA”]
count0=0
n=0
发现=错误
当n
一个简单的修复方法就是这样做。不过,你应该考虑重构你的代码。
stop_codons = ["TAG", "TAA"]
count0 = 0
n = 0
found = False
while n < len(seq):
if seq[n:n+3] in stop_codons:
found = True
break
count0 += 1
n += 3
if not found:
count0 = 0
stop_密码子=[“TAG”,“TAA”]
count0=0
n=0
发现=错误
当n
您搜索停止密码子,如果找到它,它会过早退出循环。
否则,它将运行完整的循环,在n==len(seq)
时退出循环,然后仍然打印计数
两种解决方案:
仅在找到终止密码时打印:
count1 = 0
n = 1
while n < len(seq):
if seq[n:n+3] in stop_codons:
print count1
break
count1 += 1
n += 3
你搜索停止密码子,如果它找到了,它就会过早地退出循环。 否则,它将运行完整的循环,在
n==len(seq)
时退出循环,然后仍然打印计数
两种解决方案:
仅在找到终止密码时打印:
count1 = 0
n = 1
while n < len(seq):
if seq[n:n+3] in stop_codons:
print count1
break
count1 += 1
n += 3
seq=“tcattctattataaaaaaaaaaaaaggttggttggttggttggttggttgggggg”
stop_密码子=[“TAG”,“TAA”]
def打印计数(顺序、停止密码、开始):
发现=错误
计数=0
n=开始
当n
seq=“tcattctatttaaaaaaaaataaaggggttggttggttggttggttggttgggggg”
stop_密码子=[“TAG”,“TAA”]
def打印计数(顺序、停止密码、开始):
发现=错误
计数=0
n=开始
当n
我建议将迭代代码推送到函数中:
def get_codon_index(seq, start_idx):
count = 0
n = start_idx
while n < len(seq):
if seq[n:n+3] in stop_codons:
return count
count += 1
n += 3
return -1
def get_codon_索引(seq,start_idx):
计数=0
n=开始\u idx
当n
这样可以省去引入布尔标志的工作量,避免代码重复
我返回
-1
而不是0
,因为0
可能是密码子的实际索引(如果密码子正好位于序列的开头)。我建议将迭代代码推到函数中:
def get_codon_index(seq, start_idx):
count = 0
n = start_idx
while n < len(seq):
if seq[n:n+3] in stop_codons:
return count
count += 1
n += 3
return -1
def get_codon_索引(seq,start_idx):
计数=0
n=开始\u idx
当n
这样可以省去引入布尔标志的工作量,避免代码重复
我返回
-1
而不是0
,因为0
可能是密码子的实际索引(如果密码子正好位于序列的开头)。此代码将在序列中循环,并在找到返回停止密码子第一个字符位置的TAA或标记序列时停止
seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG"
list = ["z", "z", "z"] # otherwise the list will not be of 3 characters
i = 0
for letter in seq:
list.pop(0)
list.append(letter)
codon = "".join(list)
i = i + 1
if codon == "TAG" or codon == "TAA":
print i - 2 # to print the position of T
break
该代码将在序列中循环并在找到返回终止密码子第一个字符位置的TAA或标记序列时停止
seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG"
list = ["z", "z", "z"] # otherwise the list will not be of 3 characters
i = 0
for letter in seq:
list.pop(0)
list.append(letter)
codon = "".join(list)
i = i + 1
if codon == "TAG" or codon == "TAA":
print i - 2 # to print the position of T
break
帮你自己一个忙,不要再发明轮子,特别是当它是免费的和广泛使用的时候。帮你自己一个忙,不要再发明轮子,特别是当它是免费的和广泛使用的时候。在你的样品中它发现了TAA(我也能看到),所以它打印了18。但是你说它“应该是0,因为在找到“TAG”或“TAA”之前序列结束了”,请写一个以n为参数的函数。您将避免大量代码重复和错误@doctorlove TAA在第+1帧中。那是从卡特开始的。。。在第0帧TCATTCT中没有停止…在您的示例中它找到了TAA(我也可以看到),所以它打印18。但是你说它“应该是0,因为在找到“TAG”或“TAA”之前序列结束了”,请写一个以n为参数的函数。您将避免大量代码重复和错误@doctorlove TAA在第+1帧中。那是从卡特开始的。。。第0帧中没有停止TCATTCT…谢谢你的帮助JohannesThanks谢谢你的帮助Johannest这正是我想要做的。谢谢你的帮助!不客气。请接受我(或其他人之一)的答案。这正是我想要做的。谢谢你的帮助!不客气。请接受我(或其他人之一)的答案。