问题是关于更快,即。更pythonic,测试迭代中是否有任何元素存在于另一个iterable中的方法。
我想做的是:
if "foo" in terms or "bar" in terms or "baz" in terms:
pass
但显然这种方式重复了'in terms'条款并且使代码膨胀,特别是当时 我们正在处理更多的元素。所以我想知道在python中是否有更好的方法。
答案 0 :(得分:5)
在特殊情况下,您还可以考虑是否可以使用set
而不是迭代。如果两者(foobarbaz
和terms
)都是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