Python遍历列表时删除元素的正确做法

在删除之前,先看下正序删除的原理

lst =[1,2,3]
for i in lst:
    lst.remove(i)

列表中元素在内存中的位置:1 2 3
第一次执行remove(i),删除列表中的第一个元素1,列表中元素在内存中的位置:2 3(注意后面元素的位置往前顶了)
第二次执行remove(i),删除列表中的第二个元素3,列表中元素只剩余2
第三次执行remove(i),删除列表中的第三个元素,但是列表中已经没有了第三个元素,循环退出

如何解决这种问题呢?用以下两种方法:

  • 可以将列表lst进行复制成一个新列表new_lst,遍历新列表new_lst删除列表lst中的元素
lst =[1,2,3]
new_lst = lst[:]
for i in new_lst:    #每次遍历的都是new_lst
    lst.remove(i)
print("lst = %s" %lst)  #lst = []
  • 倒序遍历删除元素,前面的元素不会往后靠,就可以删除完列表中的元素
lst =[1,2,3]
for i in range(len(lst)-1,-1,-1):
    lst.remove(lst[i])
print("lst = %s" %lst)  #lst = []

你可能感兴趣的:(【Python知识点】)