Вы можете использовать понимание списка, чтобы проверить каждое слово в списке и вернуть логическое значение. Затем вызовите встроенную функцию any
в результирующем списке, которая возвращает True
, если хотя бы один элемент списка равен True
:
lambda lst, x: any([s in x.lower() for s in lst])
In Фактически, вы можете получить лучшую производительность, используя выражение генератора вместо понимания списка, просто снимая скобки. Таким образом, 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
In в вашем случае, если лямбда-функция должна получить только один аргумент из кадра данных, вместо передачи списка возможных строк, вы можете либо жестко закодировать ее:
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))