Python 无法计算生成对象的长度

Python 无法计算生成对象的长度,python,graph,networkx,Python,Graph,Networkx,我正在通过networkx为girwan_newman分析编写代码。我在标有$$的行上有一个错误。它所说的“生成器”类型的对象没有len() 在生成器对象上使用list(): l = len(list(c)) 在这一步 c = nx.connected_components(G) # new syntax for x in c: # <--------------- print(len(x)) 解决方案2: l = 0 c = nx.connected_components(

我正在通过networkx为girwan_newman分析编写代码。我在标有$$的行上有一个错误。它所说的“生成器”类型的对象没有len()

在生成器对象上使用
list()

l = len(list(c))
在这一步

c = nx.connected_components(G) # new syntax
for x in c: # <---------------
    print(len(x)) 
解决方案2:

l = 0
c = nx.connected_components(G) # new syntax
for x in c:
    print(len(x))
    l = l+1

这将为您提供0。因为您的生成器对象将耗尽。@user140446 watch@Pygirl comment,她是对的,所以您需要在c中的x的
之前使用
l=len(list(c))
l
每次都将为零。另外,看看@Joel关于你代码中的另一个问题,除了你遇到的问题之外,我在这里看到了一些问题。假设它是一个连通图。现在您正在计算
c
,找到它的长度。然后,如果长度为1,则删除一条边,再次查找
c
,打印组件的数量为1(不仅仅是
l
,因为保证
l==1
在该循环中),然后永远重复此过程,因为
l
在循环中从不改变。最终,一旦
G
没有边缘,就会出现错误。
c = nx.connected_components(G) # new syntax
c = list(c)
for x in c:
    print(len(x))
l = 0
c = nx.connected_components(G) # new syntax
for x in c:
    print(len(x))
    l = l+1