在Python中简化表达式
我觉得应该有一种更简单、更干净或更快的方法来写这个表达式...
假设有一个大字符串 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`的值,也就是有没有找到匹配的字符串。
第二行代码用的是生成器表达式,这种写法更高效,因为它不会先生成一个完整的列表,而是逐个检查每个小字符串,找到一个匹配的就会停止。这种方式在处理大量数据时会更快。