gpt4 book ai didi

python - Networkx 提取特定维度的连通分量子图列表 : incorrect counts

转载 作者:太空宇宙 更新时间:2023-11-03 15:56:12 24 4
gpt4 key购买 nike

我通过这种方式提取了图 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() 方法。

关于python - Networkx 提取特定维度的连通分量子图列表 : incorrect counts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40748062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com