Python 罗莎琳德决议案
这是我对此处提出的问题的解决方案:Python 罗莎琳德决议案,python,string,bioinformatics,rosalind,Python,String,Bioinformatics,Rosalind,这是我对此处提出的问题的解决方案: def subs(字符串,子字符串): lista=[] i=0 而i
def subs(字符串,子字符串):
lista=[]
i=0
而i<(len(字符串)-len(子字符串)):
如果字符串[i:(i+len(子字符串)-1)]==子字符串:
lista.append(i)
i+=1
返回列表a
我的代码有什么问题?有一个问题是,您不能将整数添加到列表中,您需要附加它:
lista.append(i)
那么这个片段就太短了:在Python中,a[i:j]
提供从位置i
到位置j
的所有字符,但不包括位置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
def subs(字符串,子字符串):
lista=[]
i=0
而i<(len(字符串)-len(子字符串)):
如果字符串[i:i+len(子字符串)]==子字符串:
lista.append(i+1)
i+=1
返回列表a
功能性风格
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]
>>>
也可以使用正则表达式执行此操作,类似于以下内容:
[m.start()+1 for m in re.finditer("(?=ATAT)", "GATATATGCATATACTT")])
缩进是错误的。你能告诉我在哪里吗?到处都是,但我认为这只是复制/粘贴错误的结果,在文本编辑器中,缩进在你这边很好。你是对的。是我的错。谢谢@NorthCat。它到底是怎么不起作用的?如何运行它,您看到了什么?运行:
subs('gatatatgcatatact','ATAT')
输出:[]
[m.start()+1 for m in re.finditer("(?=ATAT)", "GATATATGCATATACTT")])