在Python中简化表达式

时间:2011-06-20 19:34:00

标签: python string iteration expression

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

采取BigString =“这是一个关于一只名叫dude的红猫的长句。”

和LittleStringList = [“红狗”,“红猫”,“红色鼠标”]

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

def listcontains(list, big):
    contains = False
    for string in list:
        if string in big:
            contains = True
        else:
            pass
    return contains

任何帮助表示赞赏!感谢。

编辑:修正了一个小错误!

6 个答案:

答案 0 :(得分:11)

any([s in BigString for s in LittleStringList])

甚至更好地使用生成器表达式 - 正如@GWW指出的那样:

any(s in BigString for s in LittleStringList)

答案 1 :(得分:3)

使用any():

>>> BigString = "This is a long sentence about a red cat named dude."
>>> LittleStringList = [ "red dog", "red cat", "red mouse" ]
>>> any([str in BigString for str in LittleStringList])
True

>>> BigString = "This is a long sentence about a red bear named dude."
>>> any([str in BigString for str in LittleStringList])
False

答案 2 :(得分:1)

我认为你的意思是if string in big? 也许然后尝试:

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())

答案 3 :(得分:1)

  1. 您不需要通过整个列表,返回第一场比赛
  2. 不要将string用作变量名称,它是一个模块,str是一种类型,更好的单词是word
  3. 请勿使用list作为变量名称
  4. 您正在循环list并再次检查list,而不是大
  5. 所以

    def listcontains(words, big):
        for word in words:
            if word in big:
                return True
        return False
    

答案 4 :(得分:0)

为了缩短它,你可以写一下:

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

答案 5 :(得分:0)

any(filter(lambda x: x in BigString, LittleStringList))

过滤器将返回一个包含BigString中LittleStringList单词的列表,如果过滤器返回一个出现一些的列表,则任何单词将返回true