【发布时间】:2017-12-27 16:29:47
【问题描述】:
我有一个 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”的元素。
【问题讨论】:
-
在迭代列表时不要改变列表。此外,使用
.remove(..)使其成为O(n^2) 算法。 -
如果您正在寻找它为什么不起作用的解释,那是因为当它删除一个元素时,列表中的每个其他元素都会移到一个之上,这意味着将跳过一个元素在下一次迭代中,所以如果连续两个有
0则第二个将被 for 循环跳过
标签: python string list for-loop