Python 图中所有连通节点的计数

Python 图中所有连通节点的计数,python,graph,Python,Graph,我有一个大于10k的(无序)数字对列表。我想直接或间接地将它们划分为一组连接对。我认为这对应于无向图。我正在使用python,并尝试了类似于表示这种结构的东西 为了了解连接到i的所有号码, 我可以检查列表中除I之外的所有j是否都有从I到j的路径。然而,在这个实现中,计算时间对于我正在处理的列表的大小来说太长了。有没有更有效的方法?(或者是否已经建立了python库?听起来您似乎对计算图形的连接组件感兴趣。我建议调查一下包裹及其包装 例如,假设我们的数据是一组成对的数字,每对数字代表图形中的一条边

我有一个大于10k的(无序)数字对列表。我想直接或间接地将它们划分为一组连接对。我认为这对应于无向图。我正在使用python,并尝试了类似于表示这种结构的东西

为了了解连接到
i
的所有号码,
我可以检查列表中除
I
之外的所有
j
是否都有从
I
j
的路径。然而,在这个实现中,计算时间对于我正在处理的列表的大小来说太长了。有没有更有效的方法?(或者是否已经建立了python库?

听起来您似乎对计算图形的连接组件感兴趣。我建议调查一下包裹及其包装

例如,假设我们的数据是一组成对的数字,每对数字代表图形中的一条边:

pairs = [
    (1, 2),
    (2, 4),
    (3, 5),
    (2, 5),
    (7, 9),
    (9, 10),
    (8, 7)
]
在由这些边表示的图中,集合
{1,2,3,4,5}
中的任意一对节点之间存在路径,并且
{6,7,8,9,10}
中的任意一对节点之间也存在路径。但是没有路径,比如说从
5
7
。也就是说,图中有两个连接的组件

为了发现这些组件,我们首先导入
networkx
并创建一个图形:

>>> import networkx as nx
>>> graph = nx.from_edgelist(pairs)
计算组件非常简单

>>> list(nx.connected_components(graph))
>>> [{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}]
nx.connected_components
是一个生成器,因此这里我们将结果转换为一个列表,以显示所有连接的组件

我们还可以找到包含给定节点的连接组件:

>>> nx.node_connected_component(graph, 3)
{1, 2, 3, 4, 5}
我们还可以快速计算连接组件的数量:

>>> nx.number_connected_components(graph)
2

你是想找到一个图的连接部分吗?@jme是的,这听起来像是我要做的。是的,这就是我要找的。谢谢你的详细回答!连接的组件在scipy中也可用:。我不知道哪种实现更快,但它可以避免项目中的额外依赖。第二个链接已断开