简化Python中的表达式
我觉得必须有一种更简单/更干净/更快(选择一种或多种)的方式来编写这个表达式 这是一个关于一只名叫杜德的红猫的长句 和LittleStringList=[“红狗”、“红猫”、“红老鼠”] 实际上,我想要一个函数/表达式,当其中一个LittleStringList在BigString中时返回true。我是这样写的:简化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
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也允许),因为这是内置类型的名称(例如:trylist([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