-2

这是我对这里提出的问题的解决方案: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

我的代码有什么问题?

4

3 回答 3

1

您也可以使用正则表达式执行此操作,如下所示:

[m.start()+1 for m in re.finditer("(?=ATAT)", "GATATATGCATATACTT")])
于 2015-04-08T01:26:08.693 回答
0

它的一个问题是您不能将整数添加到列表中,您需要附加它:

lista.append(i)

然后切片太短:在 Python 中,为您提供从 position到但不包括position的a[i:j]所有字符。因为你从长度中减去 1,所以每次都会比较一个字符太少。ij

最后,要获得问题中要求的确切答案,您需要将 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
于 2014-04-29T16:58:49.507 回答
0

功能性风格全部使用: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]
>>> 
于 2014-04-29T17:56:22.133 回答