【问题标题】:looping in list while changing it在更改列表时循环列表
【发布时间】:2021-11-13 05:21:30
【问题描述】:

即使列表已更新,我也想遍历列表的原始条目。

itterable = copy.deepcopy(dict[node].adjacent_nodes)
for i in itterable:

    new_node = create_node(i)
    dict[node].adjacent_nodes.append(new_node)
    dict[node].adjacent_nodes.remove(i)

我希望我的dict[node].adjacent_nodes 仅更新次数,因为最初dict[node].adjacent_nodes 中有元素。这不会发生。我错过了什么?

__

例如,如果最初是 dict[node].adjacent_nodes = [1,2]。然后我的 for 循环应该运行 2 次。每次创建一个新节点并添加到dict[node].adjacent_nodes。最后 for 循环应该以dict[node].adjacent_nodes = [create_node(1), create_node(2)] 结束

【问题讨论】:

    标签: python list dictionary for-loop


    【解决方案1】:

    您没有指定输出与预期输出问题的完整工作示例,所以我猜测一些可能的问题:

    1. 在创建此复合节点对象时可能会出现递归循环 - 在 create_node() 部分或 copy.deepcopy()(包含对自身的直接或间接引用的复杂对象)中。
    2. 在执行copy.deepcopy() 时,您可能会复制一些数据,这些数据稍后会导致问题,因为它不应该被复制(例如图形的全局状态等)。
    3. create_node() 影响 itterableadjacent_nodes 结构。
    4. appendremove 的行为方式与您在数据结构中的预期不同。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2016-07-21
      • 2021-10-09
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多