Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 通过平衡括号进行解析并获得相应的元素_Arrays_List_Python 2.7_Io_Parentheses - Fatal编程技术网

Arrays 通过平衡括号进行解析并获得相应的元素

Arrays 通过平衡括号进行解析并获得相应的元素,arrays,list,python-2.7,io,parentheses,Arrays,List,Python 2.7,Io,Parentheses,我基本上要处理一个类似于平衡括号的问题,但有一点变化。 我需要读取一个如下所示的文件(一个文件中只有2行): 正如您所看到的,每个字母都有一个相应的“(“or”)”或“.”与其关联,所有括号都是平衡的,但它们是嵌套的。与公式一样,每个“(“and”)”表示有一对在顶部有相应的字母 例如:如果a“(“上面有字母“a”和相应的“)”{使其平衡}上面有一个“u”,则表示存在一个“a”-“u”配对。“.”表示这些字母表没有配对。这样,我需要创建所有对的完整映射,并将其写入新文件。 在所有情况下,“a”与

我基本上要处理一个类似于平衡括号的问题,但有一点变化。 我需要读取一个如下所示的文件(一个文件中只有2行):

正如您所看到的,每个字母都有一个相应的“(“or”)”或“.”与其关联,所有括号都是平衡的,但它们是嵌套的。与公式一样,每个“(“and”)”表示有一对在顶部有相应的字母

例如:如果a“(“上面有字母“a”和相应的“)”{使其平衡}上面有一个“u”,则表示存在一个“a”-“u”配对。“.”表示这些字母表没有配对。这样,我需要创建所有对的完整映射,并将其写入新文件。

在所有情况下,“a”与“u”配对,“g”与“c”配对

我正在考虑将其分解为更小的平衡括号块,并将其转换为数组,但我发现很难同时解析这两行。虽然我以前写过检查平衡括号的程序,但我似乎无法想出一个逻辑来将每个括号映射到上面的字母表,并将其与对应括号的字母表配对

如果有人能帮我大致描述一下,我会非常感激,因为我真的没有取得任何实质性的进展

编辑:我需要每组平衡括号的输出如下所示:

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)