我正在运行代码以清理数据库。基本上,如果某个值出现在列表中,则应将其删除。
下面您将看到代码:
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)
时,仅显示两个值(一个为空)。
在迭代过程中修改列表效果不佳。是否可以选择建立新列表?类似于:
filtered_cc = [
i for i in cc
if not (i in ag or i in cpf or i == "")
]