У меня есть две строки:
t = 'GATATCATGCATATACTT'
s = 'ATAT'
Я пытаюсь создать функцию, которая возвращает в списке позиции, в которых причина строки s была найдена в последовательности строки t. То есть в этом случае позиции будут [1, 10]. Но также, если причина не найдена, список вернет [-1].
def search_motif (t, s):
search_motif = list()
for i, x in enumerate(t):
if s in x:
search_motif.append(i)
i + = 1
return [-1] # this must go to the end
print (search_motif (t, s))
Я иду правильным путем? Кто-нибудь может помочь мне?
2 ответа
Использование регулярных выражений кажется лучшим способом.
import re
def search_motif(t, s):
p = re.compile(s)
motif = []
for mo in p.finditer(t):
motif.append(mo.start())
if motif:
return motif
else:
return -1
Изменить: mo.span () [0] -> mo.start ()
Для этого можно использовать str.index
>>> def findall(text,subtext):
i=0
ind=[]
while True:
try:
i = text.index(subtext,i) #the second argument tell where to start looking for the sub string
ind.append(i)
i +=1 #for the next iteration we start looking in the immediate next index
except ValueError: #we break when no more occurrences are found
break
if i==0: #we check if we didn't found a match before
ind.append(-1)
return ind
>>> t = 'GATATCATGCATATACTT'
>>> s = 'ATAT'
>>> findall(t,s)
[1, 10]
>>> findall(t,"X")
[-1]
>>>
Теперь о вашем коде. Есть две причины, по которым он не работает: во-первых, вы не возвращаете составленный список, а во-вторых, потому что вы смотрите на отдельные символы.
>>> for i,x in enumerate("HELLO"):
print(x)
H
E
L
L
O
>>>
И если вы не ищете персонажа, вы никогда не найдете совпадения
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
x
в петле? Вы не возвращаете созданный список, если он не пустой. Я рекомендую что-нибудь вродеreturn search_motif or [-1]