Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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
如何在Python上递归地收集嵌套列表中的链接信息?_Python_Recursion_Nested Lists - Fatal编程技术网

如何在Python上递归地收集嵌套列表中的链接信息?

如何在Python上递归地收集嵌套列表中的链接信息?,python,recursion,nested-lists,Python,Recursion,Nested Lists,我是python的初学者,我有一个问题,我不知道如何处理 我有一个嵌套列表,每个子列表有一个字符串和一个三个字符串的元组: [['V1',P1',B',X'],['R1',S1',B',G'],['V1',R1',B',L'],['R1',Z1',B',Z'],['R1',P1',X',A'],['P1',R1',X',B']] 我需要从一个关键点到另一个关键点跟踪公共信息,以获得刺激链 例如,在属于“V1”的第一个子列表中,元组的第一个位置是“P1”,第三个位置是“X”。这意味着我们已经在V1

我是python的初学者,我有一个问题,我不知道如何处理

我有一个嵌套列表,每个子列表有一个字符串和一个三个字符串的元组:

[['V1',P1',B',X'],['R1',S1',B',G'],['V1',R1',B',L'],['R1',Z1',B',Z'],['R1',P1',X',A'],['P1',R1',X',B']]

我需要从一个关键点到另一个关键点跟踪公共信息,以获得刺激链

例如,在属于“V1”的第一个子列表中,元组的第一个位置是“P1”,第三个位置是“X”。这意味着我们已经在V1和P1之间建立了链接。但是为了能够更进一步地跟踪,我需要搜索一个子列表,它的第一个元素是'P1',第二个位置的元组中有'X',例如类似列表的最后一个示例:

['P1', ('R1', 'X', 'B')]]
如果这个连接存在,这意味着我们在V1->P1->R1之间有一个链

我应该继续使用“R1”作为子列表的下一个第一位置,“B”作为其元组中的第二个条件。例如:

['R1', ('Z1', 'B', 'Z')]
这将我们的链修改为V1->P1->R1->Z1

这种递归应该继续,直到我们找不到子列表的第一个元素,并且条件位于其元组的第二个位置

我应该明确指出,如果存在不止一种连接可能性,那么这些可能性应形成不同的链,如:

V1 -> P1 -> R1 ->Z1
V1 -> P1 -> R1 ->S1
我已经尝试过编写一个递归函数来跟踪所有链接的数据,但它并没有像它应该的那样工作

def loop_搜索项,列表: list_rel=[item[0]]我们将以列表的形式保存链 如果lenlistt==0: 返回列表 其他: 对于列表中的i: 如果项目[1][0]==i[0]和项目[1][2]==i[1][1]: 列表\u rel.appendloop\u search,listt[lenlistt:]
提前感谢您的帮助。

我相信您严重低估了实现您描述的内容所需的逻辑量。如果存在不止一种可能性,那么在每个级别上,您都需要处理从递归返回的所有可能性,您的代码只考虑单例。和其他问题:

LINKS = [ \
    ['V1', ('P1', 'B', 'X')], \
    ['R1', ('S1', 'B', 'G')], \
    ['V1', ('R1', 'B', 'L')], \
    ['R1', ('Z1', 'B', 'Z')], \
    ['R1', ('P1', 'X', 'A')], \
    ['P1', ('R1', 'X', 'B')], \
]

def link_search_recursive(item, links):
    _, (first, _, effect) = item

    chains = []

    for idx, link in enumerate(links):

        link_key, (link_first, cause, _) = link

        if first == link_key and effect == cause:

            sub_chains = link_search_recursive(link, links[:idx] + links[idx + 1:])

            if sub_chains:
                for chain in sub_chains:
                    chains.append([first] + chain)
            else:
                chains.append([first, link_first])

    return chains

def link_search(item, links):
    chains = link_search_recursive(item, links)

    key, _ = item

    return [[key] + chain for chain in chains]

print(link_search(LINKS[0], LINKS[1:]))
print(link_search(LINKS[-1], LINKS[:-1]))
你需要仔细描述沿途的每一个结构,并解释一切

输出


X和B值的含义是什么?X和B是“原因”和“影响”值。通常在元组区域中,第二位是“原因”表示,第三位是“效果”。此代码将用于获取关键基础设施的故障场景。我正在搜索原因值与影响值匹配的时间,以找出可能的故障原因会依次影响哪些组件。
> python3 test.py
[['V1', 'P1', 'R1', 'S1'], ['V1', 'P1', 'R1', 'Z1']]
[['P1', 'R1', 'S1'], ['P1', 'R1', 'Z1']]
>