搜索2个列表中的匹配字符串根本不起作用

时间:2017-03-19 20:20:19

标签: python django

我正在为网站开发一个特定的功能(使用Django),我需要比较2个字符串列表。

第一个列表包含一些必需的标识符,第二个列表包含一些其他标识符。

我必须验证第二个列表中缺少第一个列表中的哪个ID,执行此操作:

def mods_checker(request):
html = request.POST["text"]

all_mods = Mod.objects.exclude(deprecated=True)
soup = BeautifulSoup(html, "html.parser")
links = soup.find_all('a', {'data-type': 'Link'})
ids = []
all_ids = []
missing_mods = []

for l in links:
    ids.append(get_id(l.text))

for m in all_mods:
    all_ids.append(m.get_id())

print ids
print all_ids

for m in all_mods:
    if m.get_id not in ids:
        missing_mods.append(m.name)

return HttpResponse(json.dumps(missing_mods))

(对不起缩进,当然我的编辑器一切正常)

我知道这段代码是多余的,我做了一些检查和一些调试打印。

问题在于我得到了一组错误的ID(所有这些,更具体地说),我不知道为什么。

我在python编辑器中对测试数据进行的每次检查都没问题。我做错了什么?

每次打印都很好,我可以正确获取所有ID。

1 个答案:

答案 0 :(得分:2)

if m.get_id not in ids不能是True,因为您正在测试功能是否在您的列表中,而不是结果(如上所述)。

你必须实际调用它才能使用括号工作:

if m.get_id() not in ids:

除此之外:如果您想加快查找代码的速度,请考虑为set

创建ids
ids = {get_id(l.text) for l in links}