使用列表推导来更新for循环中的列表

时间:2016-11-21 03:59:27

标签: python list loops

我正在尝试使用for循环更新列表,我知道它不起作用但不确定最佳方法是什么。

l = ['axy','axy','bxy','cxy']

for i in l:

    item = 'ax'
    l = [s for s in l if not s.startswith(item)]
    print l

输出:

['bxy', 'cxy']
['bxy', 'cxy']
['bxy', 'cxy']
['bxy', 'cxy']

预期产出:

['bxy', 'cxy']
['bxy', 'cxy'] 
['bxy', 'cxy'] 

#1 less loop as the list should've been updated to l = ['bxy','cxy'] after the first loop

它告诉我列表得到更新但迭代没有,反正我是否可以在循环中使用列表推导?

我使用它来删除文件,所以当删除文件时,我需要更新列表,以免再次提示。

2 个答案:

答案 0 :(得分:2)

您正在迭代一个包含四个项目的列表,并且每次迭代时都会打印列表 - 这是前4个打印件。最后一行来自该计划的最后一行:print l

四次迭代来自这样一个事实:列表在进入循环时有4个项目。 那个列表正在循环中进行迭代,你只是覆盖指向列表l的指针(原始列表现在只在你重新分配后才存在{{1你不能再访问了它。)

答案 1 :(得分:-1)

这是因为赋值始终会创建一个新引用,并且不会更新列表。

评估for循环时,function clearCke(){ for ( instance in CKEDITOR.instances ){ CKEDITOR.instances[instance].updateElement(); CKEDITOR.instances[instance].setData(''); } } $(document).ready(function(){ $('#from').submit(function() { clearCke(); }); }); 被其当前值替换。现在这不会发生在循环的每次迭代中。它只发生一次。

乳清你使用' ='更改了循环中l的值。它创建了新引用,因此名称l完全指向不同的列表。它不会影响已在for循环中评估的列表。

如果您使用更新列表的操作,例如lupdate,您将看到您期望的输出