Python函数不计算三个字母序列的所有连续实例

Python函数不计算三个字母序列的所有连续实例,python,string,Python,String,这是一个函数,用于查找三个字母字符串在不带空格的较大字母字符串中的连续出现(这是一个dna序列)。我写这篇文章是为了通过首先将字符串拆分成一个列表来计算它;但是,它没有正常工作。例如,突变(“tacagcagtcaaga”)应该返回3,但通过我的代码,它返回2。我打印了它正在使用的列表,因此我知道问题在于如何将原始字符串拆分为列表。我不知道如何修理它。有没有一种方法可以在三个字符的块中对字符串进行迭代和计数,或者我是否有正确的想法尝试使用列表?任何帮助都将不胜感激。多谢各位 def mutati

这是一个函数,用于查找三个字母字符串在不带空格的较大字母字符串中的连续出现(这是一个dna序列)。我写这篇文章是为了通过首先将字符串拆分成一个列表来计算它;但是,它没有正常工作。例如,
突变(“tacagcagtcaaga”)
应该返回
3
,但通过我的代码,它返回
2
。我打印了它正在使用的列表,因此我知道问题在于如何将原始字符串拆分为列表。我不知道如何修理它。有没有一种方法可以在三个字符的块中对字符串进行迭代和计数,或者我是否有正确的想法尝试使用列表?任何帮助都将不胜感激。多谢各位

def mutation(dna):
    #first need to split string into list of codons 
    codon_list = [] #initialize codon list
    i = 0 #initialize step
    #write a for loop 
    n = 3
    for i in range(i, len(dna), n):
        codon_list.append(dna[i:i+3])
      
    #initialize variables 
    count = 0
    pointer = 0
    max_consec = 0
    #use a while loop to count occurrences of CAG
    while count < len(codon_list):
        
        if codon_list[count] == 'CAG':
            pointer += 1 
            if pointer > max_consec: 
                max_consec = pointer
        else: 
            pointer = 0
            
        count += 1 

    return max_consec
def突变(dna): #首先需要将字符串拆分为密码子列表 密码子列表=[]初始化密码子列表 i=0#初始化步骤 #写一个for循环 n=3 对于范围内的i(i,len(dna),n): 密码子列表追加(dna[i:i+3]) #初始化变量 计数=0 指针=0 最大连续时间=0 #使用while循环计算CAG的出现次数 当计数最大值: max_conce=指针 其他: 指针=0 计数+=1 返回最大连续时间
你可能想用正则表达式来解决这个问题。下面的例子如何?首先,你可以用下面的公式找到“dna”中最长的“sub_str”序列,它将返回最大的连续出现次数,然后分别除以字符串的长度

import re

def mutation(dna, sub_str):
   res = max(re.findall('((?:' + re.escape(sub_str) + ')*)', dna), key = len)
   return len(res)/len(sub_str)

不包括一些边缘情况,确保测试自己的需求

,你只考虑从3倍的索引开始的子串。你为什么不直接做dna.count('CAG')?为什么会返回3?@Thierrylahuille这就是dna的工作原理,它由3个碱基组成。在这种情况下,OP提供的序列中只有2个'CAG'序列,代码的输出是正确的。对。其中一个
CAG
不是密码子,它被拆分为
TAC
AGC