【问题标题】:Find if any element of list exists in another list in Python查找列表的任何元素是否存在于Python中的另一个列表中
【发布时间】:2014-03-20 20:32:56
【问题描述】:

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

我想做的是这样的:

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

但显然这种方式重复了“in terms”子句并使代码膨胀,尤其是当 我们正在处理更多的元素。所以我想知道在python中是否有更好的方法。

【问题讨论】:

标签: python list


【解决方案1】:

您也可以在特殊情况下考虑是否可以使用sets 代替可迭代对象。如果(foobarbazterms)都是sets,那么你可以写

if foobarbaz & terms:
    pass

这并不比你的方式特别快,但它是迄今为止更小的代码,因此可能更适合阅读。

当然,并不是所有的可迭代对象都可以转换为sets,所以这取决于你的用例。

【讨论】:

  • 有趣的是,它适用于我的用例。我应该从一开始就使用套装。谢谢!
【解决方案2】:

想出了一个办法,在这里发布以供参考。试试这个:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多