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/
作者
puresai
许可协议