Почему фильтрация не работает в моем понимании списка? - PullRequest
0 голосов
/ 29 октября 2018

Я хочу отфильтровать список, используя понимание списка, но мой фильтр никогда не вызывается, и возвращаются все элементы из исходного списка. Что я делаю не так?

def my_filter(value):
    print('filter called')
    return False

results = set([v for v in ['test'] if my_filter])

print(results)

Результаты:

{'test'}

1 Ответ

0 голосов
/ 29 октября 2018

Я забыл фактически вызвать функцию фильтра! Исправленный код будет:

results = set([v for v in ['test'] if my_filter(v)])

                                               ^^^
                                          difference here

Для каждого элемента v в списке я хотел проверить достоверность my_filter(v), которая будет False. Вместо этого я проверял правдивость my_filter, что всегда верно, поэтому все предметы были возвращены.

Я думаю, что перепутал синтаксис понимания списка с функцией filter:

results = set(filter(my_filter, ['test']))
...