Python 删除networkx中的孤立顶点

Python 删除networkx中的孤立顶点,python,networkx,Python,Networkx,文档中说,可以使用networkx.isolates(G)获得图中的孤立顶点。它补充说,可以使用代码G.remove_nodes_from(nx.insolates(G))从图G中删除孤立顶点 但是当我运行代码时,我得到了运行时错误“dictionary changed size in iteration” 错误报告:- >>G.从(nx.隔离(G))中移除节点 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/home/iitdm/anaconda2/lib/python2.7

文档中说,可以使用networkx.isolates(G)获得图中的孤立顶点。它补充说,可以使用代码G.remove_nodes_from(nx.insolates(G))从图G中删除孤立顶点

但是当我运行代码时,我得到了运行时错误“dictionary changed size in iteration”

错误报告:-
>>G.从(nx.隔离(G))中移除节点
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/iitdm/anaconda2/lib/python2.7/site packages/networkx/classes/graph.py”,第617行,从中删除节点
对于n个in节点:
文件“/home/iitdm/anaconda2/lib/python2.7/site packages/networkx/algorithms/isolate.py”,第94行,在
返回值(n表示n,d表示G.degree(),如果d==0)
文件“/home/iitdm/anaconda2/lib/python2.7/site packages/networkx/classes/reportviews.py”,第443行,在__
对于n个自组织节点:
运行时错误:字典在迭代过程中更改了大小

这是可以理解的,也是人们所期望的,因为(我认为)使用函数insulates()创建的生成器对象会随着G的变化而变化,因此在“迭代”时更改图形G也会产生类似的错误。那么文档中的那一行一定是错的,不是吗?我完全错了吗?我对python还很陌生

顺便说一下,networkx.isolates()返回的对象是生成器对象


谢谢

我想你是对的,提交文档补丁

此外,您还可以将生成器强制转换为列表,以避免此问题:

G.从(列表(nx.isolates(G))中删除节点)

但是为什么你的工作是围绕着工作的呢?我不明白;情况没有改变

我必须看一下他们的代码,但我的直觉是,生成器的懒散是基于异常消息的

强制转换为list时,集合是在作为参数馈送之前创建的,因此在对象迭代时不会产生任何副作用

正如@Dyz的回答所指出的,文档是正确的,您使用的是Nx 2.0


在fed as参数行为之前创建的集合是否适用于任何类型的强制转换(例如,口述或集合)?——

嗯,不完全(一套就行)dict不会,因为它需要一对物品<代码>列表和
设置
当像函数一样调用时(和dict,但它同样需要成对(元组列表将起作用))调用
\uuuuuuiter\uuuu

生成器具有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,这使得它们(+许多其他对象)。生成器非常适合处理各种用例,例如,当您有大量的项集合,并且需要多次循环它们时,它可以节省运行时的复杂性


但是,也有一些细微差别,例如您遇到了什么,您必须了解一些内部结构才能正确使用。

您混淆了
networkx-2.0
(其中
隔离
返回迭代器)和
networkx-1.10
的文档(其中
隔离
返回列表)。您的代码在
networkx-1.10
中运行得非常好。在2.0中将
列表
应用于
隔离
会将情况简化为1.10中存在的情况。

您在使用2.X时查看的是1.X的文档。不幸的是,1.X文档的搜索引擎排名更高

在networkx 2.X中,是一个生成器对象

当前稳定的文档将向示例代码中添加list()

[107]中的
nx.分离物(G)
出[107]:
如果您也期望1.X的行为,迁移指南可能会有所帮助


@salparadise请将其作为答案发布,以便我可以接受。但是为什么你的工作是围绕着工作的呢?我不明白;情况没有改变!作为答复提交。也解决了您的问题。我从哪里可以获得networkx 2.X的脱机文档?@CyriacAntony这些文档位于github repo中。在fed-as-argument行为之前创建的集合是否适用于任何类型的cast(比如dict或set)?
In [107]: nx.isolates(G)
Out[107]: <generator object isolates.<locals>.<genexpr> at 0x7fa499cd8e60>