罗莎琳德决议noob



这是我对此处问题的解决方案:http://rosalind.info/problems/subs/.

def subs(string,subString):
    lista=[]
    i=0
    while i < (len(string)-len(subString)):
        if string[i:(i+len(subString)-1)]==subString:
           lista.append(i)
        i+=1
    return lista

我的代码出了什么问题?

您也可以使用正则表达式来实现这一点,如下所示:

[m.start()+1 for m in re.finditer("(?=ATAT)", "GATATATGCATATACTT")])

它的一个错误是,你不能向列表中添加整数,你需要附加它:

lista.append(i)

则切片太短:在Python中,a[i:j]提供从位置i的所有字符,但不包括位置j。因为你从长度中减去1,它每次比较的一个字符太少。

最后,为了得到问题中要求的确切答案,您需要在位置上添加1,因为Python索引的数组从0开始,而不是从1开始。

def subs(string,subString):
    lista = []
    i = 0
    while i < (len(string)-len(subString)):
        if string[i:i+len(subString)] == subString:
           lista.append(i + 1)
        i += 1
    return lista

函数样式pwned all:D

def mysub2(string, sub):    
    return [x+1 for x in range(len(string)) if string[x:x+len(sub)] == sub]


>>> def mysub(string, sub):          
    return [x+1 for x in range(len(string)) if string[x:x+len(sub)] == sub]
>>> st = "GATATATGCATATACTT"
>>> sub2 = "ATAT"
>>> mysub(st, sub2)
[2, 4, 10]
>>> 

最新更新