filter()

Содержание
Введение
Пример без лямбды
Пример с лямбдой
Применение совместо со split()
Похожие статьи

Введение

# -> returns only those elements of iterable # where function returned True

Синтаксис

filter(function, sequence)

Возвращает функция filter() объект

<filter object at 0x7f5e0bf2e2b0>

который можно передать, например в list()

Пример без лямбд

Нужно из списка убрать все элементы, которые не являются строками. Сначала напишем функцию на основе isinstance() , которая возвращает True если объект имеет строковый тип.

def only_str(x): return isinstance(x, str) a = ["a", 1, 2, 3, "b", 4] strings = filter(only_str, a) print(list(strings))

['a', 'b']

Пример с лямбдой

Если создавать отдельную функцию не хочется, можно воспользоваться лямбда функцией

a = ["a", 1, 2, 3, "b", 4] strings = filter(lambda x: isinstance(x, str), a) print(list(strings))

['a', 'b']

С помощью лямбд можно написать довольно широкий набор простых фильтров.

# filter() positives = filter(lambda x: x > 0, [1, -5, 0, 6, -2, 8]) print(positives) print(list(positives)) # Filtering with None trues = filter(None, [0, 1, False, True, [], [1, 2, 3], '', 'hello']) print(list(trues)) # In Python2 map() and filter() are not lazy as in Python3. # They are eager and return lists

[1, 6, 8] [1, True, [1, 2, 3], 'hello']

Применение совместо со split()

split() может выдать не совсем тот результат, который вы хотите. В частности он добавляет пустые строки, избавится от которых можно с помощью filter() так как пустая строка возвращает False.

Допустим, нужно из /hei/hei/ получить список из hei и hei

>>> '/hei/hei/'.split('/') ['', 'hei', 'hei', ''] >>> list(filter(None, '/hei/hei/'.split('/'))) ['hei', 'hei']

Автор статьи: Андрей Олегович

Похожие статьи
*args **kwargs
sys.argv: аргументы командной строки
Лямбда функции
Функции первого класса
Замыкания
Декораторы
Кэширование
if, elif, else
Методы
Итерация
Генераторы
Генераторы: Maintaining State
Встроенные фукнции: all()zip()

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: