我有一个for循环,它应该从包含' 0'的列表中删除所有字符串项。但是,它只删除了其中一些。
for e in l:
if '0' in e:
l.remove(e)
在我的情况下l
是一个转换成字符串的整数列表,在我的测试运行中,这个列表在执行for循环之前看起来像这样:
['12345', '23456', '34567', '45678', '56789', '67891', '78910', '89101', '91011', '10111', '01112', '11121', '11214', '12141', '21414', '14145', '41455', '14555', '45550', '55500', '55008', '50088', '00887']
之后就这样:
['12345', '23456', '34567', '45678', '56789', '67891', '89101', '10111', '11121', '11214', '12141', '21414', '14145', '41455', '14555', '55500', '50088']
只删除了六个元素,一些元素仍然包含' 0'然而,仍然离开了。
答案 0 :(得分:3)
在迭代期间不要删除元素
l = ['12345', '23456', '34567', '45678', '56789', '67891', '78910', '89101', '91011', '10111', '01112', '11121', '11214', '12141', '21414', '14145', '41455', '14555', '45550', '55500', '55008', '50088', '00887']
new_l = [ele for ele in l if '0' not in ele]
['12345', '23456', '34567', '45678', '56789', '67891', '11121', '11214', '12141', '21414', '14145', '41455', '14555']
答案 1 :(得分:2)
在迭代它时更改列表是个坏主意。相反,您可以创建一个新列表,并仅向l
中添加不包含0的元素,如下所示:
res=[]
for e in l:
if '0' not in e:
res.append(e)
你也可以用列表理解来做到这一点:
res=[e for e in l if '0' not in e]
答案 2 :(得分:0)
这种情况正在发生,因为每当您有2个需要删除的连续元素时,为前例a b c d
而您想删除b
和{{ 1}}和当前位置位于c
。
因此,当您删除b
时,列表变为b
,当前位置为a c d
。
<当你在迭代时,当前位置移动到c
并且d
被跳过。
ChristianDean建议的解决方案是使用您想要保留的值创建一个新列表
c