在不创建无限循环的情况下将列表理解循环转换为常规 for 循环

Convert a list comprehension loop into a regular for loop without creating an infinite loop

我正在尝试转换此列表理解:

cfg = []
...
cfg = [conf + function1(s) for s in cfg] 

给一个普通的多行for,因为需要包含更多的东西进去:

cfg = []
...
for s in cfg:
    cfg.append(conf + function1(s))

但是在第二种情况下,创建了一个无限循环。

列表理解与普通 for 循环的等效性是什么?

你可以做两件事:

  • 预先创建 cfg 的副本:

    for s in cfg[:]: 
    
  • 或附加到列表并替换旧的:

    new_cfg = []
    for s in cfg:
        new_cfg.append(...)
    
    cfg = new_cfg
    

第二个选项最接近列表推导式,因为它也在重新绑定之前先创建一个新列表。第二个选项 替换 旧的 cfg 列表值。

但是,您的完整 for 循环等同于第一个选项,因为该选项 保留 cfg 的旧值 ,附加新值.你的列表理解从来没有这样做过。