在Python中简化表达式

3 投票
6 回答
565 浏览
提问于 2025-04-16 19:56

我觉得应该有一种更简单、更干净或更快的方法来写这个表达式...

假设有一个大字符串 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 个回答

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

使用 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
11

这段代码的意思是:检查在一个大字符串(BigString)里,是否有小字符串列表(LittleStringList)中的任何一个字符串存在。

第一行代码使用了一个列表推导式,意思是它会生成一个列表,里面包含了每个小字符串是否在大字符串中出现的结果,然后用`any`函数来检查这个列表里有没有`True`的值,也就是有没有找到匹配的字符串。

第二行代码用的是生成器表达式,这种写法更高效,因为它不会先生成一个完整的列表,而是逐个检查每个小字符串,找到一个匹配的就会停止。这种方式在处理大量数据时会更快。

撰写回答