Python在遍历时删除元素

之前在leetcode刷题的时候,如果用for循环删除list的元素时总会发生问题。由此来总结一下遍历删除元素的各个方法

我比较常用的——建立新的list

简单直接的方法可以挺好的解决这个问题,建立一个新的list。如果结果不符合,则跳过这个元素,符合的时候把这个元素加入list。
虽然这样显得比较蠢,但是遇到问题的时候比较容易想起来

延伸:遍历拷贝的list。操作原始的list

1
2
3
for i in lst[:]:
if i == 0:
lst.remove(i)
  • 在这里,lst[:]已经是拷贝之后的结果了,也就是说对原来的lst操作不会对拷贝的结果产生影响

filter

  • 显得比较聪明的一种方法
  • filter是python里面的一个函数,包括两个参数
    • function:用于条件判断。这个function可以是之前已经用def定义好的function,也可以是用lamnda简写的function
    • lst:用于输入需要修改的list,参数是一个可迭代的对象
      1
      lst = filter(lambda x: x != 0, lst)

也就是说,会先判断x是否不等于0,如果返回值是true,那么保留这个元素。如果返回值是false,则删除这个元素。

列表解析

也就是在1行里面写list的方法

1
lst  = [x for x in lst if x != 0]

while判断

1
2
while 0 in lst:
lst.remove(0)

倒序循环

  • 这个方法占用的空间最少
  • 但是可读性比较差
1
2
3
for i in range(len(lst)-1,-1,-1):
if lst[i] == 0:
del lst[i]