如何在Python上递归地收集嵌套列表中的链接信息?
我是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',例如类似列表的最后一个示例:如何在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
['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']]
>