我觉得必须有一个更简单/更清洁/更快(选择一种或多种)的方式来编写这个表达式......
采取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
任何帮助表示赞赏!感谢。
编辑:修正了一个小错误!
答案 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)
string
用作变量名称,它是一个模块,str
是一种类型,更好的单词是word
。list
作为变量名称list
并再次检查list
,而不是大所以
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