【发布时间】:2019-08-15 13:27:52
【问题描述】:
我是 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_search(item, listt):
list_rel=[item[0]] #we will save chain in form of a list
if len(listt)==0:
return list_rel
else:
for i in listt:
if item[1][0]==i[0] and item[1][2]==i[1][1]:
list_rel.append(loop_search(i,listt[len(listt):]))
提前感谢您的帮助。
【问题讨论】:
-
X和B值的含义是什么? -
X 和 B 是“原因”和“影响”值。通常在元组区域中,第二位是“原因”表示,第三位是“效果”。此代码将用于获取关键基础设施的故障场景。我正在搜索原因值何时与影响值匹配,以找出哪些组件将从可能的故障原因中依次受到影响。
标签: python recursion nested-lists