计算DNA序列串中的核苷酸

时间:2012-10-20 04:42:09

标签: python

我写过这个函数,它不能按照我的意愿运行。有什么想法吗? 我理解问题是以某种方式对char定义...

def count_nucleotides(dna, nucleotide):
    ''' (str, str) -> int

    Return the number of occurrences of nucleotide in the DNA sequence dna.

    >>> count_nucleotides('ATCGGC', 'G')
    2
    >>> count_nucleotides('ATCTA', 'G')
    0
    '''

    num_nucleodites=0

    for char in dna:
        if char is ('A'or'T'or'C'or'G'):
            num_nucleodites=num_nucleodites + 1      
    return num_nucleodites

5 个答案:

答案 0 :(得分:3)

怎么样只是

def count_nucleotides(dna, nucleotide):
    return dna.count(nucleotide)

(请注意,就家庭作业而言,这可能不会飞......)

答案 1 :(得分:2)

根据你的一条评论,似乎你正在寻找一个以上核苷酸的重叠序列。这可以使用正则表达式完成:

import re
def find_overlapping(needle, haystack):
    return len(re.findall("(?=" + needle + ")", haystack))

然后您可以像这样使用它:

>>> find_overlapping("AGA", "AGAGAGAAGAGAG")
5

答案 2 :(得分:0)

您所写的or条件无法按照您的想法运作..它应该检查每个char,然后使用or将它们分开,类似于这个: -

if char is 'A' or char is 'T' ... so on:

但是,您可以使用in运算符更好的方式。

试试这个: -

for char in dna:
        if char in 'ATCG':
            num_nucleodites=num_nucleodites + 1 

但是既然你在question中说过你只想要一个特定元素的计数,你就不需要用所有4个字符来检查每个字符..这就是你的代码应该如何使用basic -loop: -

def count_nucleotides(dna, nucleotide):
    num_nucleotide = 0
    for char in dna:
        if char == nucleotide:
            num_nucleotide = num_nucletode + 1
    return num_nucleotide

或者只是: -

def count_nucleotides(dna, nucleotide):
    return dna.count(nucleotide)

答案 3 :(得分:0)

if char is ('A'or'T'or'C'or'G'):

即评估返回'A'的'A' or 'T',然后检查char是否等于它 - 在Python REPL中尝试:

>>> ('A'or'T'or'C'or'G')
'A'

我认为你打算做的是:

if char in ('A', 'T', 'C', 'G'):

答案 4 :(得分:0)

string = "ATAGTTCATGTACCGTTGCAGGGGG"
print [(i,string.count(i)) for i in list("ACTG")]