检查字符串x
是否是y
的子字符串的Pythonic方法是:
if x in y:
查找x
是否等同于a
、b
、c
、d
、e
、f
或g
也是Pythonic式的:
if x in [a,b,c,d,e,f,g]:
但是检查某个字符串x
是否包含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
有没有一种更具风格的方法来检查字符串x
是否包含列表元素?
我知道使用循环或正则表达式自己编写这段代码是很简单的:
re.search('(dog|cat|bird|mouse|elephant|pig|cow)', x)
但我想知道是否有一种不涉及正则表达式的更干净的方法。
发布于 2013-11-01 02:32:33
Pythonic式的方法是使用any()
if any(s in x for s in (a,b,c,d,e,f,g)):
从链接的文档中:
any
(iterable)
如果iterable的任何元素为true,则返回True。如果iterable为空,则返回False。等同于:
def any(iterable):for element in iterable: if element: return True return False
另外,请注意,我在这里使用的是元组而不是列表。如果您的a
-g
值是预定义的,那么tuple确实更好。请参阅:Are tuples more efficient than lists in Python?
发布于 2013-11-01 02:32:39
if any(q in x for q in [a,b,c,d,e,f,g]):
我认为这是你能得到的最短的Pythonic。
发布于 2013-11-01 13:25:51
参加派对有点晚了,但是
not frozenset(x).isdisjoint(frozenset(y))
可以工作,而且可能更快(在算法上,但对于较小的测试用例可能不是)。
https://stackoverflow.com/questions/19714041
复制相似问题