计算python中的间隙数

计算python中的间隙数,python,count,sequence,Python,Count,Sequence,如何计算序列中的间隙数: 例如: s1='G _ A A T T C A G T T A' s2='G G _ A _ T C _ G _ _ A' s3='G A A T T C A G T _ T _' 她的'号码是8 我尝试以下方法: def count(): gap=0 for i in range(0, len(s1), 3): for x,y,z in zip(s1,s2,s3): if (x=='_') or (y=='_'

如何计算序列中的间隙数:

例如:

s1='G _ A A T T C A G T T A'
s2='G G _ A _ T C _ G _ _ A'
s3='G A A T T C A G T _ T _'
她的
'
号码是8

我尝试以下方法:

def count():
    gap=0
    for i in range(0, len(s1), 3):
        for x,y,z in zip(s1,s2,s3):
            if (x=='_') or (y=='_')or (z=='_') :
                gap=gap+1
        return gap
它给出了6个而不是8个具有count()方法的字符串:


位于第10位的两个
\uu
仅计数两次。你应该得到7分,而不是6分


简单的解决方案是
sum([s1,s2,s3]]中项目的[item.count(“”))

您的代码返回7,它是所有下划线的总计数减去从第三位到最后一位的额外下划线。您可以通过删除或测试(在找到匹配项时使测试短路)来修复此问题

还要注意的是,不需要将邮政编码增加三倍,也不需要以三倍的步幅循环

以下是原始代码的清理版本:

def count():
    gap=0
    for x,y,z in zip(s1,s2,s3):
        if (x == '_'):               # these if-stmts don't short-circuit
            gap += 1
        if (y == '_'):
            gap += 1
        if (z == '_'):
            gap += 1
    return gap
还有其他更快的方法(即str.count方法),但我想向您展示如何修复和清理原始逻辑。当你做其他分析时,这应该让你走上正确的轨道

def count():
    gap=0
    for x,y,z in zip(s1,s2,s3):
        if (x == '_'):               # these if-stmts don't short-circuit
            gap += 1
        if (y == '_'):
            gap += 1
        if (z == '_'):
            gap += 1
    return gap