python中的相交列表不起作用

时间:2016-01-28 17:24:36

标签: python list

我在执行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()函数根本没有删除任何东西。

1 个答案:

答案 0 :(得分:3)

怎么样?
def intersect(a, b): return [x for x in a if x in b]

如果ab都是列表,这应该可以正常工作。

正如汤姆在评论中正确指出的那样,这是一个缓慢的算法。

def intersect(a, b):
    sb = set(b)
    return [x for x in a if x in sb]

应该更快。

如果您对这两种算法的粗略比较感兴趣,请查看this blog post