查找Python中的另一个列表中是否存在任何列表元素

时间:2014-03-20 11:19:05

标签: python list

问题是关于更快,即。更pythonic,测试迭代中是否有任何元素存在于另一个iterable中的方法。

我想做的是:

if "foo" in terms or "bar" in terms or "baz" in terms: pass

但显然这种方式重复了'in terms'条款并且使代码膨胀,特别是当时 我们正在处理更多的元素。所以我想知道在python中是否有更好的方法。

3 个答案:

答案 0 :(得分:5)

在特殊情况下,您还可以考虑是否可以使用set而不是迭代。如果两者(foobarbazterms)都是set s,那么你可以写

if foobarbaz & terms:
    pass

这并不比你的方式特别快,但到目前为止代码较小,因此可能更适合阅读。

当然,并非所有迭代都可以转换为set s,因此它取决于您的用例。

答案 1 :(得分:4)

找出一种方法,发布在这里以便于参考。试试这个:

if any(term in terms for term in ("foo", "bar", "baz")): pass

答案 2 :(得分:2)

比Alfe的答案更快,因为它只测试,而不是计算交叉点

if not set(terms).isdisjoint({'foo', 'bar', 'baz'}):
    pass