在不创建无限循环的情况下将列表理解循环转换为常规 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
的旧值 ,附加新值.你的列表理解从来没有这样做过。
我正在尝试转换此列表理解:
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
的旧值 ,附加新值.你的列表理解从来没有这样做过。