我在执行algorythm时遇到麻烦,在我的代码中交叉两个列表。我把这个讨论(下面的链接)作为参考,似乎没有任何东西像我期望的那样工作。 Find intersection of two lists?
我有这个json文件并且正在编写一个代码,该代码允许根据不同(和同时)标准对其数千个项目执行搜索。在代码的某个点上,包含已找到的json文件的所有项目的列表(根据第一个条件)必须与从第二个搜索生成的列表相交(以便生成的列表将包含项目满足两个标准)
我用不同的算法来执行交集。
def intersect(a, b):
for k in a:
print "for k in a"
if k not in b:
print "if k not b"
a.remove(k)
return a
a = intersect(a, b)
我也试过上面链接中提到的两个,更不用说我做的其他人了。
结果是我没有得到相交的列表。有时它根本不相交,有时候我不知道出了什么问题。使用上面的algorythm,remove()函数根本没有删除任何东西。
答案 0 :(得分:3)
怎么样?
def intersect(a, b): return [x for x in a if x in b]
如果a
和b
都是列表,这应该可以正常工作。
正如汤姆在评论中正确指出的那样,这是一个缓慢的算法。
def intersect(a, b):
sb = set(b)
return [x for x in a if x in sb]
应该更快。
如果您对这两种算法的粗略比较感兴趣,请查看this blog post