Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 罗莎琳德决议案_Python_String_Bioinformatics_Rosalind - Fatal编程技术网

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")])