![](/img/trans.png)
[英]Finding if any element in a list is in another list and return the first element found
[英]Check to return true if any list element found in string
我想要最簡單的(最好是lambda
)函數,如果字符串中存在任何元素列表,它會返回True
。
背景
df['cybertruck'] = df['tweet_text'].apply(lambda x: 'cybertruck' in x.lower())
上面的 lambda 函數工作正常,但我希望能夠傳遞一個值列表,例如['cyber truck', 'cybertruck']
in 以及如果在字符串中找到這些術語中的任何一個(任一) ,分配給'cybertruck'
列的值將為True
(否則為False
)。
實現這種效果的簡單方法是什么?
您可以使用列表理解來測試列表中的每個單詞並返回一個布爾值。 然后,調用any
內置函數的結果列表,它返回的True
如果列表中的至少一個元素是True
:
lambda lst, x: any([s in x.lower() for s in lst])
事實上,通過簡單地刪除括號,您可以通過使用生成器表達式而不是列表理解來獲得更好的性能。 這樣, any
將在找到第一個True
值后立即停止迭代並立即返回,從而節省一些計算能力:
lambda lst, x: any(s in x.lower() for s in lst)
例子:
>>> f = lambda lst, x: any(s in x.lower() for s in lst)
>>> f(['cyber truck', 'cybertruck'], tweet)
True
在您的情況下,如果 lambda 函數只需要從數據幀接收一個參數,而不是傳遞可能的字符串列表,您可以對其進行硬編碼:
df['cybertruck'] = df['tweet_text'].apply(lambda x: any(s in x.lower() for s in ['cyber truck', 'cybertruck']))
或將其存儲在不同的變量中:
strings = ['cyber truck', 'cybertruck']
df['cybertruck'] = df['tweet_text'].apply(lambda x: any(s in x.lower() for s in strings))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.