Networkx 提取特定维度的连通分量子图列表:不正确的计数
Networkx extracting list of connected components subgraphs of certain dimension: incorrect counts
我以这种方式提取了图 G 的所有连通分量列表作为子图列表:
sg = list(nx.connected_component_subgraphs(G))
然后我做了一些统计:
n_conn_comp = nx.number_connected_components(G) # >>> 172305
n_isolated_nodes = len(nx.isolates(G)) # >>> 152403
n_subgraf_dimensionMoreThan1 = n_conn-comp - n_isolated_nodes # >>> 19902
len(sg) # >>> 172305
到这里为止一切正常。
然后我的任务是提取维度大于 1(至少 2)的连通分量列表作为子图列表。
因为 NetworkX 中没有这样的库命令(或者我错了吗?!),我尝试这样做:
for elem in sg:
if len(elem) == 1:
sg.remove(elem)
这段代码没有错误。我预计现在 len(sg) = n_subgraf_dimensionMoreThan1,所以 = 19902。所以我检查了这个:
len(sg)
但是结果是:
>>> 91620
远超预期 (19902)
我真的不知道出了什么问题。我还尝试使用相同的代码将 len 1 的字符串删除到不同 len 的字符串列表中,并且它工作正常且正确。
子图列表可能会有不同的方式..
有什么建议吗?!非常感谢
我相信这是因为您正在从您正在迭代的同一个列表中删除项目。例如:
>>> sg = range(20)
>>> for i in sg:
sg.remove(i)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
解决方案是制作一个 sg 副本进行迭代,另一个副本调用您的 .remove() 方法。
我终于这样解决了:(列表理解)
sg_MoreThan1 = [el for el in sg_notdeg if len(el)!=1]
事实上:
len(sg_MoreThan1)
>>> 19902
谢谢。
我以这种方式提取了图 G 的所有连通分量列表作为子图列表:
sg = list(nx.connected_component_subgraphs(G))
然后我做了一些统计:
n_conn_comp = nx.number_connected_components(G) # >>> 172305
n_isolated_nodes = len(nx.isolates(G)) # >>> 152403
n_subgraf_dimensionMoreThan1 = n_conn-comp - n_isolated_nodes # >>> 19902
len(sg) # >>> 172305
到这里为止一切正常。 然后我的任务是提取维度大于 1(至少 2)的连通分量列表作为子图列表。 因为 NetworkX 中没有这样的库命令(或者我错了吗?!),我尝试这样做:
for elem in sg:
if len(elem) == 1:
sg.remove(elem)
这段代码没有错误。我预计现在 len(sg) = n_subgraf_dimensionMoreThan1,所以 = 19902。所以我检查了这个:
len(sg)
但是结果是:
>>> 91620
远超预期 (19902) 我真的不知道出了什么问题。我还尝试使用相同的代码将 len 1 的字符串删除到不同 len 的字符串列表中,并且它工作正常且正确。
子图列表可能会有不同的方式..
有什么建议吗?!非常感谢
我相信这是因为您正在从您正在迭代的同一个列表中删除项目。例如:
>>> sg = range(20)
>>> for i in sg:
sg.remove(i)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
解决方案是制作一个 sg 副本进行迭代,另一个副本调用您的 .remove() 方法。
我终于这样解决了:(列表理解)
sg_MoreThan1 = [el for el in sg_notdeg if len(el)!=1]
事实上:
len(sg_MoreThan1)
>>> 19902
谢谢。