Сплайсинг РНК Python

У меня есть последовательность генов –

"acguccgcaagagaagccuuaauauauucaaaaagcuacgccucagauuucgcgcucgagcccaaaacaacugguguacggguugaucacaucaaaugaagucgcuaaagucggugaucucacuauccuugucuucggcuuuugcucucucggcuaucaucuaagcaggcgaguuccauggugaccggaacgacggcuacuggaguccaugaucgcaagcgucgggcugggguaaaagaggcucagcucauaauaguccgccccaccaguacgggacucgauaggccccgucguugccguagaaacgcaauuuuccucagacccacuauacgcaccucgauuuagcaugguuccgggguugcgcuuugagaaucauacguaaggaucggaaccuaggaaugcaccacagaacuuugaaauacuagaacaaguugauugacaacggaguaucggcgccccacauuuaacgaauaauugcaggcgccagacgaugcuaggugcguccguaucaagauucgaggucgcuacuggcuucgcuugccgaucgagcucagaguuugugagaguuguuacuaauugcguggucgccuaauauccuugauacuacguggguguacuagacaucccggacagaaaaucucuuaaacgcuagaguucucuuggaagcgccugcacuucuugugaacauacgaugauagccacucuaagcccaacgcacuucgcuuggcccacauugcccccagagcuuauucaucgacaggcguuccacucuuggauucaucaguaaacuuuauuauacgugguaagcgugcuuauagcugucggaaucucacuuaggcggauugaagugagacagccugaaaguaaccguguacaggcgccgucaauguguuuugagugugcaccuacaaaaaguguuauuuaggcaggggagcuuuguaguuucuuuagaagagccgcgaaugaaccaacgguagacugcgagcgcguucaaccuaau"

Я хочу сплайсировать РНК и извлечь два списка (экзоны и интроны). Суть в том, что интронный участок РНК начинается с gu и заканчивается на ag. Однако, если ag появляется перед gu, это часть экзона, а не интрона.

def splice(sequence):
    introns = list()
    exons = list()

    while(sequence.count("gu")):

        if "gu" not in sequence:
            break
        else:    

            exons.append(sequence[:sequence.find("gu")])
            sequence = sequence[sequence.find("gu"):]

        if "ag" not in sequence:
            break
        else:

            introns.append(sequence[:sequence.find("ag")+2])
            sequence = sequence[sequence.find("ag")+2:]

    return introns, exons

Это то, что у меня есть до сих пор. Все идет хорошо, но проблема начинается в конце, когда появляется gu без ag в оставшейся строке.

Выход:

Exons:
['ac',
 'agaagccuuaauauauucaaaaagcuacgccucagauuucgcgcucgagcccaaaacaacug',
 'ucgcuaaa',
 'caggcga',
 'uccaugaucgcaagc',
 'aggcucagcucauaaua',
 'uacgggacucgauaggcccc',
 'aaacgcaauuuuccucagacccacuauacgcaccucgauuuagcaug',
 'aaucauac',
 'gaucggaaccuaggaaugcaccacagaacuuugaaauacuagaacaa',
 'uaucggcgccccacauuuaacgaauaauugcaggcgccagacgaugcuag',
 'auucgag',
 'cucaga',
 'a',
 'acaucccggacagaaaaucucuuaaacgcuaga',
 'cgccugcacuucuu',
 'ccacucuaagcccaacgcacuucgcuuggcccacauugcccccagagcuuauucaucgacaggc',
 'uaaacuuuauuauac',
 'c',
 'cu',
 'gcggauugaa',
 'acagccugaaa',
 'gcgcc',
 'u',
 'u',
 'gcaggggagcuuu',
 'uuucuuuagaagagccgcgaaugaaccaacg',
 'acugcgagcgc']

Introns:
['guccgcaag',
 'guguacggguugaucacaucaaaugaag',
 'gucggugaucucacuauccuugucuucggcuuuugcucucucggcuaucaucuaag',
 'guuccauggugaccggaacgacggcuacuggag',
 'gucgggcugggguaaaag',
 'guccgccccaccag',
 'gucguugccguag',
 'guuccgggguugcgcuuugag',
 'guaag',
 'guugauugacaacggag',
 'gugcguccguaucaag',
 'gucgcuacuggcuucgcuugccgaucgag',
 'guuugugag',
 'guuguuacuaauugcguggucgccuaauauccuugauacuacguggguguacuag',
 'guucucuuggaag',
 'gugaacauacgaugauag',
 'guuccacucuuggauucaucag',
 'gugguaag',
 'gugcuuauag',
 'gucggaaucucacuuag',
 'gugag',
 'guaaccguguacag',
 'gucaauguguuuugag',
 'gugcaccuacaaaaag',
 'guuauuuag',
 'guag',
 'guag']

person Ibtihaj Tahir    schedule 01.11.2018    source источник
comment
Я исправил запрос, используя регулярные выражения. def splice(gene_Sequence): # Регулярное выражение для поиска последовательностей между 'gu' и 'ag' regex = rgu(?:\w{0,}?)ag introns = re.findall(regex, gene_Sequence) для интрона в интронах : exon = gene_Sequence.replace(intron, ) вернуть интроны, экзон   -  person Ibtihaj Tahir    schedule 08.11.2018
comment
Так это исправило проблему?   -  person Oka    schedule 27.03.2019
comment
@IbtihajTahir Было бы хорошо опубликовать ваше исправление/ответ как ответ, а не как комментарий.   -  person Colin Anthony    schedule 29.03.2019
comment
@ColinAnthony Хорошо, я сделаю это прямо сейчас.   -  person Ibtihaj Tahir    schedule 29.03.2019
comment
@IbtihajTahir Отлично! теперь вы можете принять это как ответ! :D   -  person Colin Anthony    schedule 18.11.2019


Ответы (1)


Я исправил запрос, используя регулярные выражения.

def splice(gene_Sequence): 

    regex = r"gu(?:\w{0,}?)ag" 
    introns = re.findall(regex, gene_Sequence) 

    for intron in introns: 
        exon = gene_Sequence.replace(intron, "") 

    return introns, exon
person Ibtihaj Tahir    schedule 29.03.2019