Фильтрация строк с использованием тернарного оператора - PullRequest
0 голосов
/ 30 мая 2020

Мне нужно знать, почему мой option1 работает, а option2 - нет. Я не ищу решения для понимания списка или альтернативного ответа.

Option1 : это работает и дает [23, 23, 34], что я ожидал

list(filter(lambda x: True if x>9 else False, [1,23,23,34]))

Option2 не работает. Обратите внимание, что у меня несколько строки для проверки по списку

list(filter(lambda x: True if x in ('red', 'oh') else False, ['fred', 'john', 'Nick']))

Ожидаемый результат от option2 :

['fred', 'john']

1 Ответ

2 голосов
/ 30 мая 2020
True if x in ('red', 'oh') else False

Посмотрите на x. Если x - это «Фред», x - это не в «красном» («красный» в «Фреде»). Вы хотите противоположное.

True if 'red' in x or 'oh' in x else False

Итоговая строка

list(filter(lambda x: True if 'red' in x or 'oh' in x else False, ['fred', 'john', 'Nick']))

Хотя это не очень красиво, но вот как вы можете сделать это с любым количеством строк:

names = ['fred', 'john', 'nick']
subs = ['red', 'oh']
list(filter(lambda x: True if any([y in x for y in subs]) else False, names))
...