You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

networkx调用all_node_cuts转list后遍历print无输出原因

现象原因

nx.all_node_cuts(G1)的返回值是一次性生成器(迭代器)对象,不是可以反复遍历的列表、集合类容器,这类对象的特性是仅支持一次完整遍历,遍历到末尾后就会彻底耗尽,无法再产出任何元素。
原代码的执行逻辑:

  • 调用接口拿到生成器,赋值给allNodeCuts
  • 执行a = list(allNodeCuts)时,Python会自动遍历这个生成器的所有元素,将其转换为列表存入变量a,这一步执行完后,allNodeCuts指向的生成器已经走到迭代末尾,没有剩余元素
  • 后续执行for i in allNodeCuts时,生成器已经耗尽,循环体不会触发,print(i)自然没有任何输出。
    如果把a = list(allNodeCuts)移到for循环之后,执行顺序变为:
  • 拿到生成器后,先执行for循环遍历,此时生成器还未被消耗,可以正常产出所有元素完成打印
  • 循环结束后生成器才被耗尽,此时再执行list(allNodeCuts)只会得到空列表,不会影响前面的循环输出。

问题涉及的代码如下:

import networkx as nx
G1 = nx.erdos_renyi_graph(10,0.6)
allNodeCuts = nx.all_node_cuts(G1)
a = list(allNodeCuts)

for i in allNodeCuts:
    print(i)

补充说明:Python中所有返回生成器的接口都遵循这个规则,比如内置的map()、filter()、带yield关键字的自定义函数返回值,都只能完整遍历一次。如果需要多次使用遍历结果,要在第一次遍历的时候就把结果存到列表等可重复访问的容器中。

内容的提问来源于stack exchange,提问作者Nazhir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:46:03