使用python计算值之间的距离

时间:2013-09-04 09:04:32

标签: python bioinformatics

我是python的新手,非常感谢你的帮助。

我有这个脚本,它按序列中的每三个碱基计数,直到它识别终止密码子,然后中断并返回该值。这适用于每个阅读框0,+ 1,+ 2。

我希望它在脚本运行到序列末尾之前返回值0,然后才能识别终止密码子。目前,脚本为count0返回18,当序列结束时,应该为0,然后才能找到“TAG”或“TAA”

感谢任何帮助!

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 

结果:

18
3
6

6 个答案:

答案 0 :(得分:2)

一个简单的解决方法就是做这样的事情。不过你应该考虑重构你的代码。

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

答案 1 :(得分:2)

我建议将迭代代码推送到函数中:

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

这样可以节省引入布尔标志和避免代码重复的工作。

我返回-1而不是0,因为0可能是密码子的实际索引(如果密码子位于序列的开头)。

答案 2 :(得分:0)

您搜索终止密码子,如果找到它,它会过早地退出循环。 但是否则,它运行完整的循环,在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

或设置stopped标志:

count1 = 0
n = 1
stopped = False
while n < len(seq):
    if seq[n:n+3] in stop_codons:
        stopped = True
        break
    count1 += 1
    n += 3
if stopped:
    print count1   

答案 3 :(得分:0)

seq="TCATTCTaTTTAAAAAAatATAAAaGGGgTTTTGGGgTTTtGGGGTTTtGGGG"
stop_codons = ["TAG", "TAA"]

def printcount(seq, stop_codons, start):
    found = False
    count = 0
    n = start
    while n < len(seq):
        if seq[n:n+3] in stop_codons:
            found = True
            break        
        count += 1
        n += 3
    print count if found else 0

printcount(seq, stop_codons, 0)
printcount(seq, stop_codons, 1)
printcount(seq, stop_codons, 2)

答案 4 :(得分:0)

此代码将遍历您的序列并在找到TAA或TAG序列返回终止密码子的第一个字符的位置时停止

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

答案 5 :(得分:0)

帮助自己,不要重新发明轮子,特别是BioPython免费提供并广泛使用时。