python,”;“b”中的a;关键字,多个a';s

python,”;“b”中的a;关键字,多个a';s,python,Python,我在Python中的冒险仍在继续,我最喜欢的书也不再出现了。Python提供了一种内置方法,使用“in”关键字测试变量是否位于iterable对象中: if "a" in "abrakadabra" : print "it is definitely here" 但是,是否可以测试列表中是否有多个项目(任何一项)? 目前,我使用的语法如下,但有点长: if "// @in " in sTxt or "// @out " in sTxt or "// @ret " in sTxt or &l

我在Python中的冒险仍在继续,我最喜欢的书也不再出现了。Python提供了一种内置方法,使用“in”关键字测试变量是否位于iterable对象中:

if "a" in "abrakadabra" :
  print "it is definitely here"
但是,是否可以测试列表中是否有多个项目(任何一项)? 目前,我使用的语法如下,但有点长:

if "// @in " in sTxt or "// @out " in sTxt or "// @ret " in sTxt or <10 more>
  print "found."
如果sTxt中的“/@in”或sTxt中的“/@out”或sTxt中的“/@ret”,或
打印“找到”
当然正则表达式会有帮助,但是使用正则表达式会花费大量的代码,而且 没有“b中的a”那么清楚。还有其他的python方式吗?

任何(文本中的snippet\u body表示“hi”、“foo”、“bar”、“spam”)中的snippet)


并获取一个iterable,并检查其中是否有/所有值的计算结果为真值。将其与生成器表达式相结合,您可以检查多个项。

语法中没有内置的方法来执行此操作。但是,您可以使用“any”功能使其更简单,如@MizardX和@Benjamin Peterson所示。

如果您需要任何检查,则可以使用以下方法:

inthere = False
checks = ('a', 'b')

for check in checks:
    if check in 'abrakadabra':
        inthere = True
        break
inthere = True
checks = ('a', 'b')

for check in checks:
    if check not in 'abrakadabra':
        inthere = False
        break
如果您想全部退房,可以使用以下选项:

inthere = False
checks = ('a', 'b')

for check in checks:
    if check in 'abrakadabra':
        inthere = True
        break
inthere = True
checks = ('a', 'b')

for check in checks:
    if check not in 'abrakadabra':
        inthere = False
        break
编辑:不知道更像Python的
any()
。在python上使用它可能更好

EDIT2:添加了中断语句,并更正了所有情况。

您还可以使用:

非备选方案。isdisjoint(sTxt)#表示“任何”
(备选方案和sTxt)!=set()#同样,交叉点是非空的

备选方案如果要为同一个单词测试很多行,那么将它们编译为正则表达式可能会更快。例如:

import  re
words = ["// @in ", "// @out ", "// @ret "] + ["// @test%s " % i for i in range(10)]

my_regex = re.compile("|".join(map(re.escape, words)))

for line in lines_to_search:
    if my_regex.search(line):  print "Found match"
一些快速计时显示,这通常比
any(单词串中的单词表示单词中的单词)
方法快。我用不同的文本测试了这两种方法(短/长,带/不带匹配项)。结果如下:

         { No keywords  } |  {contain Keywords }
         short    long       short    long
regex  : 0.214    27.214     0.147    0.149
any in : 0.579    81.341     0.295    0.300

如果性能无关紧要,那么
any()
方法更具可读性。

这一定是一篇老文章,现在最简单的方法是列出:

a = "some long text which may or may not include bononos or cabbages"
alternatives = ["apple", "banana", "riverdale"]
if a in alternatives:
    print("Hm?")

我添加了文档的链接,这样S.Lott就不会对你投反对票;)不过,非常严肃地说,我们鼓励您链接到文档,希望您不介意。\o/很高兴有一个带有“可能比……更快”声明的基准测试!我的回答提到这些对象必须是集合。