Как пропустить поиск строки по индексу сразу после того, как было найдено значение?питон - PullRequest
0 голосов
/ 04 октября 2018

Моя программа сейчас имеет две функции.

get_orf(dna), который принимает строку с именем днк в качестве ввода.Если строка начинается со стартового кодона 'ATG', то get_orf ищет кратные 3 для любого из стоп-кодонов.

Если он находит один из них, он возвращает ORF ('ATG' ипоследовательность до стоп-кодона).

orf_List = []
stopCodons = ["TAG", "TAA", "TGA"]

def get_orf(dna):
    #checks to see if the first three amino acids are ATG
    if dna[:3] == "ATG":

        #if the first three are amino acids, 
        #it checks the dna string in multiples of 3 uisng the range fucntion
        for k in range(0, len(dna), 3):

            #checking for stop codons in the dna string
            if any(s in dna[k:k+3] for s in stopCodons):

                #if a stop codon is found, it returns it
                return dna[0:k]
        #prints No Orf if there are no stop codons found
        else:
            print("No ORF.")

    #prints No Orf if the dna does not start with ATG
    else:
        print("No ATG IN BEGINNING.")

и one_frame(dna), которые принимают строку ДНК в качестве входных данных.

one_frame ищет эту строку слева направо, кратно трем.Когда он попадает в стартовый кодон «ATG», он вызывает get_orf в срезе строки, начинающейся в этом стартовом кодоне (до конца), чтобы вернуть ORF. Этот ORF добавляется в список ORF, а затем функция пропускаетвпереди в цепочке ДНК к точке сразу после ORF, которую мы только что нашли, и начинаем искать следующую ORF. Это повторяется, пока мы не пройдем всю цепочку ДНК.

def one_frame(dna):

    i = 0
    while i < len(dna):
        for i in range(0, len(dna), 3):

            if "ATG" in dna[i:i+3]:

                newOrf = get_orf(dna[i:])
                orf_List.append(newOrf)



            #i don't know how to skip ahead

    print(orf_List) 
    return(orf_List)

Когда я звоню one_frame("ATGCCCATGCCCCCCTAG"), я не могу понять, как перейти к последнему найденному индексу ORF, чтобы я мог продолжить поиск. Любая помощь?

С этим кодом он выводит «ATGCCCATGCCCCCCTAG» И"ATGCCCCCCTAG". Меньший не должен быть напечатан, так как он находится внутри большего.

1 Ответ

0 голосов
/ 04 октября 2018

Я предлагаю вам избавиться от цикла for в one_frame и реализовать его как цикл while (похоже, вы уже пробовали это).

Тогда вы можете вручную контролировать значение iи добавьте к нему длину найденного ORF, чтобы пропустить его.

def one_frame(dna):
    orf_list = []
    i = 0
    while i < len(dna):
        if "ATG" == dna[i:i+3]:
            new_orf = get_orf(dna[i:])
            if new_orf:
                orf_list.append(new_orf)
                i += len(new_orf)
                continue
        i += 3

    print(orf_list)
    return(orf_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...