python如何遍历list并删除元素
在开发场景中,python 遍历list并删除其中部分元素是很常见的场景。我们简化一下:
现在有一个list [1,2,4,-1,-4,1,9,-7,0], 如何删除list中为负数的元素。
聪明如我,不难想到,遍历判断删除呗!soeasy!
l = [1,2,4,-1,-4,1,9,-7,0]
for item in l:
if item < 0:
l.remove(item)
print(l)
我们运行一下,看一下输出:
[1, 2, 4, -4, 1, 9, 0]
Wow~
remove 函数用于移除列表中某个值的第一个匹配项
好办,我使用index删除。
l = [1,2,4,-1,-4,1,9,-7,0]
for (i, item) in enumerate(l):
if item < 0:
del l[i]
print(l)
再来一波:
[1, 2, 4, -4, 1, 9, 0]
额额。貌似不对,我们不妨打印一下:
l = [1,2,4,-1,-4,1,9,-7,0]
for (i, item) in enumerate(l):
print(l)
if item < 0:
del l[i]
print(l)
python3 test_list.py
[1, 2, 4, -1, -4, 1, 9, -7, 0]
[1, 2, 4, -1, -4, 1, 9, -7, 0]
[1, 2, 4, -1, -4, 1, 9, -7, 0]
[1, 2, 4, -1, -4, 1, 9, -7, 0]
[1, 2, 4, -4, 1, 9, -7, 0]
[1, 2, 4, -4, 1, 9, -7, 0]
[1, 2, 4, -4, 1, 9, -7, 0]
[1, 2, 4, -4, 1, 9, 0]
能看出来删除后其实 index 变化,导致部分元素漏删了。
那么到底如何正确操作呢?
filter
l = [1,2,4,-1,-4,1,9,-7,0]
def filter_small(item):
if item < 0:
return False
return True
tmplist = filter(filter_small, l)
print(list(tmplist))
需要注意python2和Python3的filter是有区别哈!
[1, 2, 4, 1, 9, 0]
语法糖
l = [1,2,4,-1,-4,1,9,-7,0]
l = [x for x in l if x >= 0]
print(l)
注意这里条件,是>=0,就是把非整数保留。
倒序遍历
正向遍历删除元素index变化,那我倒序遍历没毛病吧
l = [1,2,4,-1,-4,1,9,-7,0]
for item in range(len(l) - 1, -1, -1):
if l[item] < 0:
del l[item]
print(l)
当然了,其实还有其他方法,比如创建个新的 list,判断后插入,这也是很简单的。
关于list遍历删除就介绍这么多了,写完代码务必老老实实各种情况测试好,不要想当然,就匆匆发布哟!
python如何遍历list并删除元素
https://blog.puresai.com/2022/11/14/461/