Python 修复无向networkx图中边的顺序

Python 修复无向networkx图中边的顺序,python,networkx,Python,Networkx,在无向NetworkX图形中,边表示为Python元组。他们的订购方式取决于你的要求。下面是我指的一个小例子: import networkx as nx g = nx.complete_bipartite_graph(2,2) print(g.edges()) print(g.edges(2)) 输出是 [(0, 2), (0, 3), (1, 2), (1, 3)] [(2, 0), (2, 1)] 有没有一种方法(不包括手动排序)可以避免对边进行不同的表示?我不确定您想要什么,因为在标

在无向NetworkX图形中,边表示为Python元组。他们的订购方式取决于你的要求。下面是我指的一个小例子:

import networkx as nx
g = nx.complete_bipartite_graph(2,2)
print(g.edges())
print(g.edges(2))
输出是

[(0, 2), (0, 3), (1, 2), (1, 3)]
[(2, 0), (2, 1)]

有没有一种方法(不包括手动排序)可以避免对边进行不同的表示?

我不确定您想要什么,因为在标题中您要求有序边,但在示例中,您要求边中的有序节点。在我的例子中,我展示了两者的顺序。请注意,我使用列表理解创建了新的边列表——原来的边列表(
some_edges
)没有改变

首先,如何对边列表中节点的各个元组进行排序。也就是说,边的顺序相同,但其中的节点已排序

import networkx as nx
g = nx.Graph()
g.add_edges_from([
    (5, 2),
    (2, 1),
    (3, 2),
    (4, 2)
])
some_edges = g.edges(2)
print("Not sorted:  ", some_edges)

print("SORTED")
# sort nodes in edges
some_edges_1 = [tuple(sorted(edge)) for edge in some_edges]
print("Sorted nodes:", some_edges_1)
现在学习如何对边列表中的边进行排序

# sort edges in list of edges
some_edges_2 = sorted(some_edges_1)
print("Sorted edges:", some_edges_2)
print("Not sorted:  ", some_edges)
print("SORTED REVERSE")
# sort nodes in edges
some_edges_1 = [tuple(sorted(edge, reverse=True)) for edge in some_edges]
print("Sorted nodes:", some_edges_1)
# sort edges in list of edges
some_edges_2 = sorted(some_edges_1, reverse=True)
print("Sorted edges:", some_edges_2)
上述两个代码块的输出:

Not sorted:   [(2, 1), (2, 3), (2, 4), (2, 5)]
SORTED
Sorted nodes: [(1, 2), (2, 3), (2, 4), (2, 5)]
Sorted edges: [(1, 2), (2, 3), (2, 4), (2, 5)]
这里还有一个反向排序的示例,您可以实际看到对单个边进行排序和对边列表进行排序之间的区别

# sort edges in list of edges
some_edges_2 = sorted(some_edges_1)
print("Sorted edges:", some_edges_2)
print("Not sorted:  ", some_edges)
print("SORTED REVERSE")
# sort nodes in edges
some_edges_1 = [tuple(sorted(edge, reverse=True)) for edge in some_edges]
print("Sorted nodes:", some_edges_1)
# sort edges in list of edges
some_edges_2 = sorted(some_edges_1, reverse=True)
print("Sorted edges:", some_edges_2)
输出:

Not sorted:   [(2, 1), (2, 3), (2, 4), (2, 5)]
SORTED REVERSE
Sorted nodes: [(2, 1), (3, 2), (4, 2), (5, 2)]
Sorted edges: [(5, 2), (4, 2), (3, 2), (2, 1)]