2015-12-19 3 views
0

Я должен в основном иметь дело с сбалансированными круглыми скобками как проблема, но с небольшим изменением. мне нужно прочитать файл, который выглядит следующим образом (только 2 строки в файле):Анализ с помощью сбалансированной круглой скобки и получение соответствующих элементов

aguuguuagucuacguggaccgacaagaacaguuucgaaucggaagcuugcuuaacguaguucuaacaguuuuuuauuag agagcagaucucugaugaacaaccaacgaaaaaagacgggucgaccgucuuucaauaugcugaaac 
...((((((.((((((...((((...(((....)))...)))(((....))).))))))..)))))).........((((((.....))))))..................(((((((.....)))))))................. 

Как вы можете видеть каждую букву имеет соответствующий «(» или «)» или «» связанные с ним, все скобки сбалансированы, но они вложены. Как и в случае с формулой, каждая «(» и «)» означает, что есть пара с соответствующими алфавитами в верхней части.

Для примера: если a "(" имеет алфавит "a" над ним и соответствующий ")" {который делает его сбалансированным} имеет надпись "u" над ней, означает, что существует "a" «u» спаривание. «.» означает, что эти алфавиты не имеют спаривания. таким образом мне нужно создать полное сопоставление всех пар и записать его в новый файл.

Во всех случаях «a» сопряжен с «u» и «g» в паре с «c».

Я собираюсь разбить это на более мелкие куски сбалансированной круглой скобки и преобразовать его в массивы, но мне трудно разобрать обе линии одновременно. Хотя я уже писал программы для проверки сбалансированной круглой скобки, но я не могу представить логику, чтобы отобразить каждую скобку в алфавит выше и сопоставить ее с алфавитом соответствующей круглой скобки.

Было бы очень признательно, если бы кто-то мог помочь мне с грубым контуром на этом, поскольку я действительно не добился существенного прогресса.

EDIT: Мне нужен выход для каждого набора сбалансированных скобок, чтобы выглядеть следующим образом:

Input: gaacaguuuc 
     (((....))) 

Output: cagu have no pairs //because they have dots underneath 
     g-c 
     a-u 
     a-u 
+0

Я бы начал с создания узлов для синтаксического анализа вместо строк. Из вашего описания две строки образуют список узлов [.()] [Acgu]. тогда ваша задача должна проанализировать список узлов. Если я получу это правильно, вы можете пропустить. позиции, так что результат имеет только паратезис и буквы в узлах. – thst

+0

Можете ли вы показать короткий выходной файл примера для сокращенной версии ввода. –

+0

@Mike Я включил Sample i/o. – Advait

ответ

0

Я уверен, что не ру Wizz. Но это мое решение вашей проблемы, как я ее понял.

inp1 = "agucagcguagcugaucguga" 
inp2 = "(..(((...(()).)...)))" 

bkts = [] 
nomatch = [] 
pairs = [] 

for idx in range(len(inp2)): 
    c = inp2[idx]; 
    if c == '(': 
     bkts.append(inp1[idx]) 
    elif c == '.': 
     nomatch.append(inp1[idx]) 
    elif c == ')': 
     if len(bkts) > 0: 
      pair = [bkts.pop(), inp1[idx]] 
      pairs.append('-'.join(pair)) 
     else : 
      print "error: Too many closing bkts" 

if len(bkts) > 0 : 
    print "Unmatched brackets! Too many open" 

print "unmatched: " + ','.join(nomatch) 
print "matches: " + ','.join(pairs) 
+0

Спасибо за контур, он решает проблему синтаксического анализа, которую я имел. – Advait

 Смежные вопросы

  • Нет связанных вопросов^_^