将列表推导循环转换为常规for循环,而不创建无限循环

时间:2015-02-20 08:18:27

标签: python for-loop list-comprehension

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

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

到常规多行for,因为有必要在其中加入更多内容:

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

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

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

1 个答案:

答案 0 :(得分:4)

你可以做两件事:

  • 事先创建cfg的副本:

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

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

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

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

相关问题