Python 使用while语句在列表上迭代,并且列表.remove中未排除值

Python 使用while语句在列表上迭代,并且列表.remove中未排除值,python,pandas,list,while-loop,Python,Pandas,List,While Loop,我正在运行一个清理数据库的代码。基本上,如果某个值出现在列表中,则应将其删除 您可以在下面看到代码: 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

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

您可以在下面看到代码:

    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”

即使我运行此检查: 如果在cpf中抄送:打印(真) 这证实了这是真的

我错过了什么


注:我发现非常有趣的是,当我在for语句中打印(I)
时,只会显示两个值(其中一个为空)。

在迭代列表时修改列表效果不太好。创建新列表是一种选择吗?比如:

filtered_cc = [
    i for i in cc
    if not (i in ag or i in cpf or i == "")
]

您可能不应该更改正在循环的列表。像这样使用except是个坏主意,请参阅。