python基础-列表循环删除的坑

134 阅读1分钟

需求

有一个列表,元素为:

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']