簡體   English   中英

如果在字符串中找到任何列表元素,則檢查以返回 true

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM