Python 如果在字符串中找到任何列表元素,请选中以返回true

Python 如果在字符串中找到任何列表元素,请选中以返回true,python,dataframe,lambda,Python,Dataframe,Lambda,我想要最简单的(最好是lambda)函数,如果字符串中存在任何元素列表,它将返回True 背景 df['cybertruck']=df['tweet_text'].apply(x.lower()中的lambda x:'cybertruck') 上面的lambda函数工作正常,但我希望能够在中传递一个值列表,例如['cybertruck','cybertruck'],如果在字符串中找到这些术语中的任何一个,则分配给列'cybertruck'的值将是True(否则False) 实现此效果的简单方法

我想要最简单的(最好是
lambda
)函数,如果字符串中存在任何元素列表,它将返回
True

背景

df['cybertruck']=df['tweet_text'].apply(x.lower()中的lambda x:'cybertruck')
上面的lambda函数工作正常,但我希望能够在中传递一个值列表,例如
['cybertruck','cybertruck']
,如果在字符串中找到这些术语中的任何一个,则分配给列
'cybertruck'
的值将是
True
(否则
False


实现此效果的简单方法是什么?

您可以使用列表理解来测试列表中的每个单词并返回布尔值。然后,在结果列表上调用,如果列表中至少有一个元素为
True
,则返回
True

lambda lst,x:any([s in x.lower()表示s in lst])
事实上,只需删除括号,就可以使用生成器表达式而不是列表理解来获得更好的性能。这样,
any
将停止迭代,并在找到第一个
True
值时立即返回,从而节省一些计算能力:

lambda lst,x:any(x中的s.lower()表示lst中的s)
例如:

f=lambda lst,x:any(x中的s.lower()表示lst中的s) >>>f(['cyber truck','cyber truck',推特) 符合事实的 在您的情况下,如果lambda函数只需要从dataframe接收一个参数,而不是传递可能的字符串列表,则可以对其进行硬编码:

df['cybertruck']=df['tweet_text'].应用(lambda x:any(s in x.lower()表示s in['cybertruck','cybertruck']))
或者将其存储在不同的变量中:

strings=['cybertruck','cybertruck']
df['cybertruck']=df['tweet_text'].apply(lambda x:any(x中的s.lower()表示字符串中的s))

您的第三个代码块示例非常有效。我以前见过
any()
出现,但直到现在才知道如何使用它!我认为清单理解是不必要的渴望。您可能会使用一个生成器表达式,如:f=lambda lst,x:any(x中的s.lower()表示lst中的s)。它应该快一点,而且肯定需要更少的内存。接得好!我会相应地更新我的答案。