Python 在嵌套图中查找所有路径
我一直在努力寻找一个相对简单问题的解决方案 给定一个图g:Python 在嵌套图中查找所有路径,python,graph,path,Python,Graph,Path,我一直在努力寻找一个相对简单问题的解决方案 给定一个图g: g = {'A': ['B', 'C'], 'B': ['A', 'C'], 'C': ['D'], 'D': [], } 使用此解决方案(我找到了)可以找到所有路径: 为了使事情更复杂,我想在g中查找所有路径,但当列表嵌套时。例如,以g为例 g2 = {'A': [['B', 'C'],['D']], 'B': [['A'], ['C']], 'C': [['D']],
g = {'A': ['B', 'C'],
'B': ['A', 'C'],
'C': ['D'],
'D': [],
}
使用此解决方案(我找到了)可以找到所有路径:
为了使事情更复杂,我想在g中查找所有路径,但当列表嵌套时。例如,以g为例
g2 = {'A': [['B', 'C'],['D']],
'B': [['A'], ['C']],
'C': [['D']],
'D': [[]]}
我正在寻找的解决办法是
[ [['A', 'B', 'C', 'D'], ['A', 'C', 'D']], ['A', 'D'] ]
其中,前两条路径被分组在一起(即,总的来说,我希望得到两条路径)。然而,上述功能是不够的。我已经尝试将此代码调整为适合我的问题,但没有成功
我正在使用的实际图形相当大,字典中的许多元素都是这些嵌套列表,因此路径的数量可能会增长得相当快
我希望这个例子有意义。任何帮助都将不胜感激
>>> {key:[ele for lst in value for ele in lst] for key, value in g2.iteritems()}
{'A': ['B', 'C', 'D'], 'C': ['D'], 'B': ['A', 'C'], 'D': []}
在我看来,这会解决你的问题
或者,在没有听写和列表理解的情况下:
result = {}
for key, value in g2.iteritems():
result[key] = []
for lst in value:
for ele in lst:
result[key].append(ele)
如果要通过原始图形对结果进行排序g2
:
# Sort by 2nd value in list
res = []
for lst in g2['A']:
res.append([])
for reslst in res:
if reslst[1] in lst:
res[-1].append(reslst)
if len(res[-1]) == 0:
res.pop()
[[['A', 'B', 'C', 'D'], ['A', 'C', 'D']], [['A', 'D']]]
在我看来,这会解决你的问题
或者,在没有听写和列表理解的情况下:
result = {}
for key, value in g2.iteritems():
result[key] = []
for lst in value:
for ele in lst:
result[key].append(ele)
如果要通过原始图形对结果进行排序g2
:
# Sort by 2nd value in list
res = []
for lst in g2['A']:
res.append([])
for reslst in res:
if reslst[1] in lst:
res[-1].append(reslst)
if len(res[-1]) == 0:
res.pop()
[[['A', 'B', 'C', 'D'], ['A', 'C', 'D']], [['A', 'D']]]
有什么理由不干脆把名单平铺一下吗?
{'A':['B','C','D']}
会在您的示例中给出所需的结果吗?如果没有,又有什么不同呢?有没有什么理由不干脆把这些列表展平?{'A':['B','C','D']}
会在您的示例中给出所需的结果吗?如果没有,区别是什么。展平并插入到生成器中会产生3条路径([['A',B',C',D'],['A',C',D'],['A',D']]),但我需要将前两条路径分组为一条路径。@Chewbaccabaca我添加了一个解决方法。。。虽然不漂亮,但很简单。谢谢你的回复。如果我将原始g2与嵌套列表一起使用,这实际上对我不起作用。展平并插入到生成器中会产生3条路径([['A'、[B'、[C'、[D']、['A'、[C'、[D']、[A'、[D']),但我需要将前两条路径分组到一条路径中。@chewbaccabacca我添加了一个解决方法。。。虽然不漂亮,但很简单。谢谢你的回复。如果我将原始g2与嵌套列表一起使用,这实际上对我不起作用。