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

Python循环中扩展列表的正确方式?附DAG广度优先遍历场景

遍历列表时动态添加元素的合法性说明

你的这段Python代码是合法且行为明确的,不属于未定义行为。

Python的for循环遍历列表时,是基于列表的迭代器逐个获取元素的。而列表是可变序列,当你在循环过程中向列表末尾添加元素时,迭代器会继续遍历这些新添加的元素,直到列表中没有更多元素为止。比如你给出的代码:

processing_list = [0]
for item in processing_list:
  if item < 10:
    processing_list.append(item + 1)

它会从0开始,依次把1到10添加进列表,直到取出10时不满足item < 10的条件,循环结束,最终processing_list会变成[0,1,2,...,10],完全符合预期。

回到你的DAG广度优先遍历场景,这种写法是可行的,但有个需要注意的点:如果处理逻辑有疏漏(比如误将带环的结构当作DAG,或者节点判断失误),可能会导致节点被重复添加,进而引发无限循环或重复处理。所以实际做BFS时,通常会额外维护一个已访问集合来规避这个问题,示例如下:

# 假设起始节点是start_node
processing_list = [start_node]
visited = set(processing_list)
for item in processing_list:
    # 遍历当前节点的所有子节点
    for child_node in get_child_nodes(item):
        if child_node not in visited:
            visited.add(child_node)
            processing_list.append(child_node)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:33:12