Arrays 通过平衡括号进行解析并获得相应的元素
我基本上要处理一个类似于平衡括号的问题,但有一点变化。 我需要读取一个如下所示的文件(一个文件中只有2行): 正如您所看到的,每个字母都有一个相应的“(“or”)”或“.”与其关联,所有括号都是平衡的,但它们是嵌套的。与公式一样,每个“(“and”)”表示有一对在顶部有相应的字母 例如:如果a“(“上面有字母“a”和相应的“)”{使其平衡}上面有一个“u”,则表示存在一个“a”-“u”配对。“.”表示这些字母表没有配对。这样,我需要创建所有对的完整映射,并将其写入新文件。 在所有情况下,“a”与“u”配对,“g”与“c”配对 我正在考虑将其分解为更小的平衡括号块,并将其转换为数组,但我发现很难同时解析这两行。虽然我以前写过检查平衡括号的程序,但我似乎无法想出一个逻辑来将每个括号映射到上面的字母表,并将其与对应括号的字母表配对 如果有人能帮我大致描述一下,我会非常感激,因为我真的没有取得任何实质性的进展 编辑:我需要每组平衡括号的输出如下所示:Arrays 通过平衡括号进行解析并获得相应的元素,arrays,list,python-2.7,io,parentheses,Arrays,List,Python 2.7,Io,Parentheses,我基本上要处理一个类似于平衡括号的问题,但有一点变化。 我需要读取一个如下所示的文件(一个文件中只有2行): 正如您所看到的,每个字母都有一个相应的“(“or”)”或“.”与其关联,所有括号都是平衡的,但它们是嵌套的。与公式一样,每个“(“and”)”表示有一对在顶部有相应的字母 例如:如果a“(“上面有字母“a”和相应的“)”{使其平衡}上面有一个“u”,则表示存在一个“a”-“u”配对。“.”表示这些字母表没有配对。这样,我需要创建所有对的完整映射,并将其写入新文件。 在所有情况下,“a”与
Input: gaacaguuuc
(((....)))
Output: cagu have no pairs //because they have dots underneath
g-c
a-u
a-u
我肯定不是个笨蛋。但据我所知,这是我解决你问题的办法
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)
我将首先创建要解析的节点,而不是字符串。根据您的描述,这两行构成了
[.()][acgu]
节点的列表。然后,您的任务是解析节点列表。如果我答对了,你可以跳过这道题。位置,这样结果在节点中只有偏执和字母。您能显示一个简短的示例输出文件,用于输入的简化版本吗。@Mike我已经包含了示例i/o。@thst,谢谢您的建议。我还需要输出包含有关“.”的信息。我是否有可能将问题分解成更小的模块,{更小的块-如示例输入},然后将字母表配对。您只转储。部分。因此,它们可以被收集并从分析偏执论中删除。你已经写了不起作用的代码了吗?你应该提供你到目前为止尝试过的东西。谢谢你的提纲,它解决了我遇到的解析问题。
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)