这是我对此处提出的问题的解决方案: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
我的代码出了什么问题?
答案 0 :(得分:1)
您也可以使用正则表达式执行此操作,如下所示:
[m.start()+1 for m in re.finditer("(?=ATAT)", "GATATATGCATATACTT")])
答案 1 :(得分:0)
有一点是错误的是你不能在列表中添加一个整数,你需要追加它:
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
答案 2 :(得分: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]
>>>