我正在尝试使用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
它告诉我列表得到更新但迭代没有,反正我是否可以在循环中使用列表推导?
我使用它来删除文件,所以当删除文件时,我需要更新列表,以免再次提示。
答案 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循环中评估的列表。
如果您使用更新列表的操作,例如l
和update
,您将看到您期望的输出