我正在为网站开发一个特定的功能(使用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。
答案 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}