Python 将列表理解循环转换为常规for循环,而不创建无限循环

Python 将列表理解循环转换为常规for循环,而不创建无限循环,python,for-loop,list-comprehension,Python,For Loop,List Comprehension,我正在尝试转换此列表: cfg = [] ... cfg = [conf + function1(s) for s in cfg] 为创建常规多行,因为需要在其中包含更多内容: cfg = [] ... for s in cfg: cfg.append(conf + function1(s)) 但在第二种情况下,会创建一个无限循环 列表理解与正常的for循环的等价性是什么?您可以做两件事: 事先创建一份cfg: for s in cfg[:]: 或附加到新列表并替换旧列表:

我正在尝试转换此列表:

cfg = []
...
cfg = [conf + function1(s) for s in cfg] 
为创建常规多行
,因为需要在其中包含更多内容:

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

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

    new_cfg = []
    for s in cfg:
        new_cfg.append(...)
    
    cfg = new_cfg
    
第二个选项与列表理解最接近,因为它也会在重新绑定之前首先创建一个新列表。第二个选项替换旧的
cfg
列表值


但是,完整的
for
循环相当于第一个选项,因为该选项保留了
cfg
的旧值,并附加了新值。你的理解力从来没有这样做过

它按预期工作,但只有一种表示法。如果不希望在第一种情况下出现重复条目,请在.append(..)之前添加.remove(..)。Thanks@Rikr:或者不使用第一种情况。每次调用
.remove()
都不能有效地清除列表。它可以按预期工作,但只能使用一种表示法。如果不希望在第一种情况下出现重复条目,请在.append(..)之前添加.remove(..)。Thanks@Rikr:或者不使用第一种情况。每次调用
.remove()
都是无效的,因为您只能清除列表。