计算python中的间隙数

时间:2014-02-23 23:00:40

标签: 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=='_')or (z=='_') :
                gap=gap+1
        return gap

它给出6而不是8

3 个答案:

答案 0 :(得分:4)

字符串有一个count()方法:

s1.count('_') + s2.count('_') + s3.count('_')

答案 1 :(得分:1)

您的代码返回 7 ,这是所有下划线减去第三个到最后一个位置的额外下划线的总数。您可以通过删除or-test(在找到匹配项时将测试短路)来解决这个问题。

另请注意,无需对代码进行三重压缩或以三次跨步为循环。

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

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 方法),但我想向您展示如何修复和清理原始逻辑。当你进行其他分析时,这应该让你走上正确的轨道。

答案 2 :(得分:0)

第10位的两个_只计算两次。你应该得到7而不是6。

简单的解决方案是sum([item.count('_') for item in [s1,s2,s3]])