如何计算序列中的间隙数:
例如:
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
答案 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]])