从列表中使用“删除”时奇怪的python列表迭代

时间:2018-03-28 13:22:19

标签: python list loops

我设法通过列表推导找到了一个有效的解决方案。但我很好奇为什么这样做。有人可以解释一下吗?

代码:

def filter_ms_list(ms_list):

trash_suffix = ['C0', 'C1', 'C2', 'C3', 'C4']

temp_list = ms_list

for ms in temp_list:
    for suffix in trash_suffix:
        if ms.endswith(suffix):
            ms_list.remove(ms)
            break
return ms_list

ms_list = ['IJM612C0', 'IJM612C1', 'IJM612C2', 'IJM612C3', 'IJM666', 'IJM667']

函数返回['IJM612C1', 'IJM612C3', 'IJM666', 'IJM667']

虽然它应该返回['IJM666', 'IJM667']

调试时我发现在删除'IJM612C0'后,它会跳转到'IJM612C2'而不是列表中的第二个元素。

起初我使用相同的列表来删除和迭代,但即使使用临时列表,如你所见,它也不起作用。

有人可以解释一下吗?谢谢!

0 个答案:

没有答案