需求
有一个列表,元素为:
lst = ['qq1','qq2','ww1','ww2','qq3','ee2']
删除列表中以qq开头的元素。
有坑的实现
for item in lst:
if item.startswith('qq'):
lst.remove(item)
结果输出:
['qq2', 'ww1', 'ww2', 'ee2']
发现没有删除干净。
原因
列表在remove元素后后面的元素会往前移,当删除qq1之后,qq2元素移动到了第一个位置,第二轮循环实际读取的元素是ww1,所以导致qq2没有删除。
正确的实现
使用临时变量,将满足条件的元素放在临时变量中。
tmp = []
for item in lst:
if not item.startswith('qq'):
tmp.append(item)
print(item)
结果输出:
['ww1', 'ww2', 'ee2']