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