Как: из одной строки в другую в длинном списке строк - PullRequest
1 голос
/ 28 сентября 2011

Представьте себе длинную строку символов: "AATTAATCTATATATTGAAATGGGGCCCCAATTTTCCCAAATC ...."

Я определяю 4 строки:

"AAT"

"ATG"
"TTT"
"ATC"

Моя миссия - найти «конечную точку» для каждой строки «AAT» в длинной строке символов. Моими конечными точками являются три последние строки «ATG», «TTT», «ATC», что означает, что мне нужно найти индекс моей начальной позиции «AAT» для моей конечной позиции, которая может быть либо «ATG», «TTT». "или" УВД ". Мне сказали продвинуться по шагам 3, но я не уверен, как это сделать.

Я пытался сделать это:

open1=open(<text>)
u=open1.read()
string1="AAT


while True:
 p=u.find(string1,p)
 p=p+1
 mylist.append(p)

print mylist

, который будет печатать расположение строк "ATG" в моем текстовом файле. Я не уверен, как двигаться дальше. Я думаю, что я мог бы найти позиции других строк, но как мне создать функцию, которая начинается с "ATG" и останавливается, пока не встретит одну из конечных точек ??

Надеюсь, это как-то понятно

1 Ответ

1 голос
/ 29 сентября 2011

Вы можете сделать это с помощью регулярного выражения:

>>> import re
>>> s = "AATTAATCTATATATTGAAATGGGGCCCCAATTTTCCCAAATC ...."
>>> [(m.start(), m.end()) for m in re.finditer('AAT.*?(?:ATG|TTT|ATC)', s)]
[(0, 8), (18, 34)]

re.finditer ищет несколько непересекающихся совпадений регулярного выражения и возвращает MatchObject для каждого из них.Методы start () и end () объекта match дают начальный и конечный индексы совпадающей строки.

Регулярное выражение ищет AAT, за которым следует что угодно, вплоть до первого вхождения ATG, TTT илиATC.

Возможно, вам понадобится динамически построить регулярное выражение, если вы не знаете начальную и конечную строки до запуска программы - это довольно просто сделать:

start = "AAT"
end = ["ATG", "TTT", "ATC"]
regex = "%s.*?(?:%s)" % (start, '|'.join(end))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...