Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简化Python中的表达式_Python_String_Iteration_Expression - Fatal编程技术网

简化Python中的表达式

简化Python中的表达式,python,string,iteration,expression,Python,String,Iteration,Expression,我觉得必须有一种更简单/更干净/更快(选择一种或多种)的方式来编写这个表达式 这是一个关于一只名叫杜德的红猫的长句 和LittleStringList=[“红狗”、“红猫”、“红老鼠”] 实际上,我想要一个函数/表达式,当其中一个LittleStringList在BigString中时返回true。我是这样写的: def listcontains(list, big): contains = False for string in list: if string

我觉得必须有一种更简单/更干净/更快(选择一种或多种)的方式来编写这个表达式

这是一个关于一只名叫杜德的红猫的长句

和LittleStringList=[“红狗”、“红猫”、“红老鼠”]

实际上,我想要一个函数/表达式,当其中一个LittleStringList在BigString中时返回true。我是这样写的:

def listcontains(list, big):
    contains = False
    for string in list:
        if string in big:
            contains = True
        else:
            pass
    return contains
感谢您的帮助!谢谢

编辑:修复了一个小错误

any([s在BigString中表示s在littlestring列表中])

或者更好地使用生成器表达式-正如@GWW所指出的:

any(BigString中的s代表LittleStringList中的s)
使用any():


要将其缩短一点,您可以改为写:

def listcontains(list, big):
    for s in list:
        if s in big:
            return True
    return False

我想你的意思是
如果字符串很大
? 也许你可以试试:

def listcontains(list, big):
    return any([string in big for string in list])
或带有生成器的版本:

def listcontains(list, big):
    def gen():
        for s in list:
            yield s in big
    return any(gen())
any(过滤器(大字符串中的lambda x:x,小字符串列表))

筛选器将返回一个在BigString中包含LittleStringList单词的列表,如果筛选器返回一个出现了某些单词的列表,any将返回true

  • 你不需要看整个名单,第一场比赛就回来
  • 不要使用
    string
    作为变量名,它是一个模块,
    str
    是一个类型,更好的word应该是
    word
  • 不要将
    列表
    用作变量名
  • 您正在
    列表
    上循环,并在
    列表
    中再次检查,而不是大的
  • 所以


    可以使用生成器表达式而不是列表comprehension@mhyfritz:如果生成器表达式是唯一的参数,则不需要额外的括号。@JAB和@unbeli:是的,我从来都不太确定这一点,所以为了安全起见,我总是添加额外的参数;)但现在,我终于抓住了这个机会。谢谢你的提示!请注意第一种方法和第二种方法的性能可能有很大的差异,尤其是当LittleStringList越来越大时。当使用生成器调用
    any
    时,它只会迭代直到表达式返回True,然后立即返回。我必须给你额外的提示和感谢。。我的脚本对这个基本语句进行了多次迭代,使用any语句而不是循环if语句,速度的提高非常可爱。这只是一个旁注,但如果使用适当的变量名,代码的可读性会大大提高。。。调用类似于
    s
    的字符串,如果可能,不要使用
    list
    (即使是python也允许),因为这是内置类型的名称(例如:try
    list([1,2,3])
    ),当然,对不起。刚刚写了一个小例子来展示这个概念!将在将来更努力地避免这种情况。只是一个旁注,但如果您正确缩进代码样本,它将使代码更可读。它有助于
    BigString
    LittleStringList
    示例以代码块或适当的代码字体显示(使用`)
    def listcontains(list, big):
        def gen():
            for s in list:
                yield s in big
        return any(gen())
    
    def listcontains(words, big):
        for word in words:
            if word in big:
                return True
        return False