检查一个列表的元素是否存在于另一个列表中(Python)
这个问题是关于如何更快速,也就是更符合Python风格的方法,来检查一个可迭代对象中的任何元素是否存在于另一个可迭代对象中。
我想做的事情类似于:
if "foo" in terms or "bar" in terms or "baz" in terms:
pass
但是这样写会重复使用'in terms'这个部分,导致代码变得冗长,尤其是当我们要处理更多元素的时候。所以我在想,是否有更好的方法在Python中实现这个功能。
3 个回答
3
这个方法比Alfe的回答更快,因为它只是检查交集,而不是计算交集。
if not set(terms).isdisjoint({'foo', 'bar', 'baz'}):
pass
4
我找到了一种方法,发在这里方便大家参考。试试这个:
if any(term in terms for term in ("foo", "bar", "baz")):
pass
5
在你的特殊情况下,你可以考虑是否可以用 set
来代替可迭代对象。如果 foobarbaz
和 terms
都是 set
,那么你可以直接写
if foobarbaz & terms:
pass
这样写虽然不一定比你原来的方法快,但代码更简洁,阅读起来也更容易。
当然,并不是所有的可迭代对象都能转换成 set
,所以这要看你的具体需求。