为了账号安全,请及时绑定邮箱和手机立即绑定

如果它们不在预选列表中,如何遍历图中的边

如果它们不在预选列表中,如何遍历图中的边

动漫人物 2022-07-26 21:02:54
我正在过滤边的子集,以便可以遍历它们。在这种情况下,我排除了“末端边缘”,它们是沿链的最终边缘:import networkx as nxgraph = nx.Graph()graph.add_edges_from([(0, 1), (1, 2), (2, 3), (3, 4)])end_nodes = [n for n in graph.nodes if nx.degree(graph, n) == 1]end_edges = graph.edges(end_nodes)print(f"end edges: {end_edges}")for edge in graph.edges:    if edge not in end_edges:        print(f"edge {edge} is not an end edge.")    else:        print(f"edge {edge} is an end edge.")但是,当您运行此代码时,您会得到以下输出:end edges: [(0, 1), (4, 3)]edge (0, 1) is an end edge.edge (1, 2) is an end edge.edge (2, 3) is an end edge.edge (3, 4) is an end edge.Edges (1, 2)and (2, 3)are not in end_edges,但它在检查False条件时返回edge not in end_edges(似乎暗示它实际上被包含,而它似乎不包含)。发生了什么事,我该如何正确过滤?Python 版本是 3.7,NetworkX 是 2.4。
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以将 end_nodes 转换为一组边并保持边无序。


>>> graph = nx.Graph()

>>> graph.add_edges_from([(0, 1), (1, 2), (2, 3), (3, 4)])

>>> end_nodes = [n for n in graph.nodes if nx.degree(graph, n) == 1]

>>> end_edges = set(map(frozenset, graph.edges(end_nodes)))

>>> end_edges

{frozenset({3, 4}), frozenset({0, 1})}

>>> for edge in graph.edges:

...     print(edge, frozenset(edge) in end_edges)

... 

(0, 1) True

(1, 2) False

(2, 3) False

(3, 4) True


查看完整回答
反对 回复 2022-07-26
?
温温酱

TA贡献1752条经验 获得超4个赞

import networkx as nx


graph = nx.Graph()

graph.add_edges_from([(0, 1), (1, 2), (2, 3), (3, 4)])

end_nodes = [n for n in graph.nodes if nx.degree(graph, n) == 1]

end_edges = graph.edges(end_nodes)

print(f"end edges: {end_edges}")

for edge in graph.edges:

    if edge not in list(end_edges):

        print(f"edge {edge} is not an end edge.")

    else:

        print(f"edge {edge} is an end edge.")


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号