我正在尝试转换此列表理解:
cfg = []
...
cfg = [conf + function1(s) for s in cfg]
到常规多行for
,因为有必要在其中加入更多内容:
cfg = []
...
for s in cfg:
cfg.append(conf + function1(s))
但在第二种情况下,会创建一个无限循环。
列表理解与普通for
循环的等价性是什么?
答案 0 :(得分:4)
你可以做两件事:
事先创建cfg
的副本:
for s in cfg[:]:
或附加到新列表并替换旧的:
new_cfg = []
for s in cfg:
new_cfg.append(...)
cfg = new_cfg
第二个选项是与列表推导最接近的选项,因为它在重新绑定之前也会先创建一个新列表。第二个选项替换旧的cfg
列表值。
但是,完整的for
循环等同于第一个选项,因为该选项会保留cfg
的旧值,并附加新值。你的列表理解从未这样做过。