首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python是否有更清晰的方式来表达“如果x包含a|b|c|d..."?

Python是否有更清晰的方式来表达“如果x包含a|b|c|d..."?
EN

Stack Overflow用户
提问于 2013-11-01 02:29:10
回答 4查看 21.9K关注 0票数 73

检查字符串x是否是y的子字符串的Pythonic方法是:

if x in y:

查找x是否等同于abcdefg也是Pythonic式的:

if x in [a,b,c,d,e,f,g]:

但是检查某个字符串x是否包含abcdefg似乎很麻烦:

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)

但我想知道是否有一种不涉及正则表达式的更干净的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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?

票数 120
EN

Stack Overflow用户

发布于 2013-11-01 02:32:39

if any(q in x for q in [a,b,c,d,e,f,g]):

我认为这是你能得到的最短的Pythonic。

票数 27
EN

Stack Overflow用户

发布于 2013-11-01 13:25:51

参加派对有点晚了,但是

not frozenset(x).isdisjoint(frozenset(y))

可以工作,而且可能更快(在算法上,但对于较小的测试用例可能不是)。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19714041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档