Python有一个更清晰的方式来expression“如果x包含| b | c | d …”吗?
检查stringx
是y
的子string的Pythonic方法是:
if x in y:
如果x
等于a
, b
, c
, d
, e
, f
或g
,也是Pythonic:
if x in [a,b,c,d,e,f,g]:
但检查是否一些stringx
包含a
, b
, c
, d
, e
, f
或g
似乎很笨重:
if a in x or b in x or c in x or d in x or e in x or f in x or g in x
有更多的Pythonic方法来检查一个stringx
包含一个列表元素?
我知道使用循环或使用正则expression式来自己写这个很简单:
re.search('(dog|cat|bird|mouse|elephant|pig|cow)', x)
但我想知道是否有一个更清洁的方式,不涉及正则expression式。
Pythonic方法将使用any()
:
if any(s in x for s in (a,b,c,d,e,f,g)):
从链接的文档:
any
( 可迭代的 )如果迭代的任何元素为真,则返回True。 如果迭代是空的,则返回False。 相当于:
def any(iterable): for element in iterable: if element: return True return False
另外,请注意,我在这里使用了一个元组而不是一个列表。 如果你的a
– g
值是预定义的,那么一个元组确实是首选的。 请参阅: 元组是否比Python中的列表更有效?
if any(q in x for q in [a,b,c,d,e,f,g]):
我认为这就像你可以得到的那样简短和Pythonic。
晚会有点迟,但是
not frozenset(x).isdisjoint(frozenset(y))
会工作,并可能会更快(algorithm,但可能不适用于较小的testing用例)。
没有使用any
但只是max
def is_in(symbol, lst): return max([symbol in x for x in lst]) print is_in('a',['ae','br','tl']) print is_in('c',['ae','br','tl'])
给
>>> True False