给出networkx中的无向图:
graph=Graph()
graph.add_edge(1,2)
graph.add_edge(2,3)
使用方法graph.edges()
查询此图的边缘集时,结果将以元组的形式返回,即边缘集的 directed 视图。在上面的示例中,graph.edges()
返回:
[(1,2),(2,3)]
如果我要查询入射到顶点2(graph.edges(2)
)的所有边,则会得到不同的有向视图:
[(2,1),(2,3)]
例如,如果我有一个将边缘(键)映射到其他对象的外部字典,则此行为是有问题的。例如:
lookup={edge : some_object(edge) for edge in graph.edges()}
for edge in graph.edges(2):
print(lookup(edge)) #throws key not found exception
由于键(1,2)存在而引发异常,但(2,1)不存在。在networkx中的无向图上进行迭代时,获取无向对象的最佳方法(高效/ pythonic / ...)是什么?我可以将some_object(edge)与edge作为其属性之一关联,但这并不能真正回答问题。
答案 0 :(得分:0)
dfs_labeled_edges(G,源)使用深度优先搜索遍历图形。 由于dfs_edges在到达每个节点后都会停止,因此不会总是检测到每个边缘。相反,可以实现dfs_labeled_edges以获得无向图中的所有边缘对象。
代码:
import networkx as nx
from networkx import dfs_labeled_edges
nodes = [1,2,3]
edges = [(1,2), (2,3)]
G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
undirectedGraphEdges = []
dfs = list(dfs_labeled_edges(G,1))
for edge in dfs:
if(edge[:2] not in undirectedGraphEdges):
undirectedGraphEdges.append(edge[:2])
if undirectedGraphEdges[0] not in edges:
del undirectedGraphEdges[0]
print(undirectedGraphEdges)
# [(1, 2), (2, 1), (2, 3), (3, 2)]