Установите флажок для возврата true, если какой-либо элемент списка найден в строке - PullRequest
0 голосов
/ 19 марта 2020

Мне нужна самая простая (предпочтительно lambda) функция, которая возвращает True, если в строке присутствует какой-либо список элементов.

Фон

df['cybertruck'] = df['tweet_text'].apply(lambda x: 'cybertruck' in x.lower())

Вышеупомянутая лямбда-функция работает нормально, но я хотел бы иметь возможность передавать список значений, например, ['cyber truck', 'cybertruck'], и если какой-либо из этих терминов будет найден в строке, значение, присвоенное столбцу 'cybertruck', будет быть True (иначе False).

Какой самый простой способ добиться sh этого эффекта?

1 Ответ

1 голос
/ 19 марта 2020

Вы можете использовать понимание списка, чтобы проверить каждое слово в списке и вернуть логическое значение. Затем вызовите встроенную функцию 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...