之前在leetcode刷题的时候,如果用for循环删除list的元素时总会发生问题。由此来总结一下遍历删除元素的各个方法
我比较常用的——建立新的list
简单直接的方法可以挺好的解决这个问题,建立一个新的list。如果结果不符合,则跳过这个元素,符合的时候把这个元素加入list。
虽然这样显得比较蠢,但是遇到问题的时候比较容易想起来
延伸:遍历拷贝的list。操作原始的list
1 | for i in lst[:]: |
- 在这里,
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 | while 0 in lst: |
倒序循环
- 这个方法占用的空间最少
- 但是可读性比较差
1 | for i in range(len(lst)-1,-1,-1): |