Does Python have a cleaner way to express “if x contains a|b|c|d…”?
本问题已经有最佳答案,请猛点这里访问。
检查字符串
1 | if x in y: |
如果
1 | if x in [a,b,c,d,e,f,g]: |
但是,检查一些字符串
1 | 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的方法来检查字符串
我知道自己用循环或使用regex来写这篇文章很简单:
1 | re.search('(dog|cat|bird|mouse|elephant|pig|cow)', x) |
但我想知道是否有一个更清洁的方法,不涉及regex。
肾盂入路采用
1 | if any(s in x for s in (a,b,c,d,e,f,g)): |
从链接的文档中:
any (iterable)Return True if any element of the iterable is true. If the iterable is empty, return False. Equivalent to:
1
2
3
4
5 def any(iterable):
for element in iterable:
if element:
return True
return False
另外,请注意,这里使用的是元组而不是列表。如果您的
1 | if any(q in x for q in [a,b,c,d,e,f,g]): |
我认为这大概是你所能得到的最短和最短的Python。
参加聚会有点晚,但是
1 | not frozenset(x).isdisjoint(frozenset(y)) |
会起作用,而且可能更快(从算法上讲,但对于较小的测试用例可能不会)。
不使用
1 2 3 4 5 | 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']) |
给予
1 2 3 | >>> True False |