未通过list.remove排除的值

问题描述 投票:1回答:1

我正在运行代码以清理数据库。基本上,如果某个值出现在列表中,则应将其删除。

下面您将看到代码:

    pattern = re.compile("((?:\d{10}|\d{9}|\d{8}|\d{7}|\d{6}|\d{5}|\d{4})(?:-?[\d]))?(?!\S)")
    cc = pattern.findall(a)
    print("cpf:", cpf)
    print("ag:", ag)
    print("cc start:",cc)
    for i in cc:
        print("i:",i)
        try:
            while i in ag: cc.remove(i)
        except:pass
        try:
            while i in cpf:cc.remove(i)
        except:pass
        try:
            while "" in i:cc.remove(i)
        except:pass
    print("final cc:",cc)

它将在我的屏幕上打印以下内容:

cpf: ['00770991092']
ag: 3527
cc start: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '00770991092', '', '', '', '', '', '', '', '', '01068651-0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
i: 
i: 01068651-0
final cc: ['00770991092']

嗯,''值被删除了,这似乎工作正常。但是,由于'00770991092'是cpf内部的值,因此应将其删除,但实际上并没有。在“最终抄送”中,这是我得到的值,应该为“ 01068651-0”。

即使我运行此检查:如果cc在cpf:print(True)中它确认它是正确的。

我想念什么?

PS .:我发现很有趣的是,当我在for句子中使用print(i)时,仅显示两个值(一个为空)。

python pandas list while-loop
1个回答
0
投票

在迭代过程中修改列表效果不佳。是否可以选择建立新列表?类似于:

filtered_cc = [
    i for i in cc
    if not (i in ag or i in cpf or i == "")
]
© www.soinside.com 2019 - 2024. All rights reserved.