检查列表中包含字符串的字符串的最简单方法是什么?

fre*_*rik 52 python string list

我发现自己反复编写相同的代码块:

def stringInList(str, list):
    retVal = False
    for item in list:
        if str in item:
            retVal = True
    return retVal
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以更快/更少的代码编写这个功能?我通常在if语句中使用它,如下所示:

if stringInList(str, list):
    print 'string was found!'
Run Code Online (Sandbox Code Playgroud)

Ter*_*ryA 77

是的,使用any():

if any(s in item for item in L):
    print 'string was found!'
Run Code Online (Sandbox Code Playgroud)

正如文档所提到的,这几乎等同于你的函数,但any()可以使用生成器表达式而不仅仅是字符串和列表,以及any()短路.一旦s in item为True,函数符(你可以简单地做这与你的功能,如果你只需要改变retVal = Truereturn True.请记住,功能突破,当它返回一个值).


您应该避免命名字符串str和列表list.这将覆盖内置类型.

  • `any`具有与@ roippi评论中给出的效率相当的效率优势:它只在真元素的第一个实例上返回`true`,如果在没有遇到真元素的情况下到达结尾则返回`false`(查看等效代码http://docs.python.org/2/library/functions.html#any) (3认同)