Python: фильтрация списка с помощью лямбда-функции

Общим требованием при написании программы на Python является возможность фильтровать списки на основе заданных условий. Из этого туториала вы узнаете, как фильтровать список с помощью лямбда-функции в Python.

Применение списков фильтрации бесконечно, и мы рассмотрим примеры, которые покажут вам некоторые из них.

Начнем фильтровать!

Как отфильтровать список с помощью лямбда-выражения в Python

Python предоставляет встроенную функцию, которая, используемая с лямбда-функцией, позволяет фильтровать список на основе определенных условий: функция filter().

Ниже вы можете увидеть синтаксис функции filter(), которая принимает два аргумента: первый аргумент — функция, а второй аргумент — итерируемый:

filter(function, iterable)

Используя функцию filter() по заданному списку, вы можете создать новый список, содержащий только те элементы исходного списка, которые соответствуют условию фильтрации. Лямбда-функция позволяет определить это условие.

Например, имея список чисел, давайте посмотрим, как создать список, включающий только отрицательные числа.

Вот лямбда-функция, которую мы будем использовать:

lambda x: x < 0

Откройте оболочку Python и выполните эту лямбду, передав ей пару чисел. Это покажет вам, как работает это лямбда-выражение.

>>> (lambda x: x < 0)(-1)
True
>>> (lambda x: x < 0)(3)
False

Примечание. В приведенном выше фрагменте кода мы использовали круглые скобки для вызова нашей лямбда-функции и передачи ей аргумента.

Наша лямбда-функция проверяет, является ли число отрицательным, и возвращает логическое значение со следующим значением:

  • True, если аргумент отрицательный.
  • False, если аргумент положительный.

Теперь давайте применим функцию filter() и эту лямбду к списку целых чисел, чтобы получить только отрицательные:

>>> numbers = [1, 3, -1, -4, -5, -35, 67]
>>> negative_numbers = list(filter(lambda x: x < 0, numbers))
>>> negative_numbers
[-1, -4, -5, -35]

Вы получаете ожидаемый результат — список, содержащий все отрицательные целые числа.

Функция фильтра возвращает список, содержащий подмножество элементов исходного списка.

Примеры функций filter() и lambda, используемых для фильтрации списка

Давайте посмотрим еще на несколько примеров фильтрации. Эти примеры дадут вам больше идей о том, как использовать лямбда-выражения Python для фильтрации списков.

Учитывая список команд Linux, возвращайте те, которые начинаются с буквы «c».

>>> commands = ['ls', 'cat', 'find', 'echo', 'top', 'curl']
>>> list(filter(lambda cmd: cmd.startswith('c'), commands))
['cat', 'curl']

Создайте список чисел с помощью функции диапазона Python и верните числа больше четырех:

>>> list(filter(lambda x: x > 4, range(15)))
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

Фильтровать четные числа из списка

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(filter(lambda x: x % 2 == 0, numbers))
[2, 4, 6, 8, 10]

Фильтрация слов длиннее определенной длины

>>> words = ["lambda", "filter", "python", "list", "programming", "function"]
>>> list(filter(lambda w: len(w) > 6, words))
['programming', 'function']

Часто задаваемые вопросы

  1. Вопрос: Чем filter() отличается от спискового включения?
    • О: Оба filter() и list comprehensions могут создавать новый список на основе условий, но генераторы списков позволяют выполнять более сложные операции. Они также могут включать предложение else, которое не поддерживается filter().
  2. Вопрос: Могу ли я использовать эту функцию filter() для изменения элементов списка, а не только для их фильтрации?
    • О: Нет, функция filter() может фильтровать элементы списка только по условию. Если вы хотите изменить элементы, рассмотрите возможность использования map() или спискового включения.
  3. Вопрос: Можно ли использовать filter() без передачи ему лямбда-функции?
    • О: Да, filter() вы можете использовать любую функцию, которая принимает один аргумент и возвращает логическое значение. Это может быть встроенная функция или функция, определяемая пользователем.
  4. Вопрос: Как мне преобразовать результат функции filter() обратно в список?
    • О: Функция filter() возвращает итератор. Чтобы преобразовать его обратно в список, вы можете использовать конструктор list().
  5. Вопрос: Что произойдет, если лямбда-функция, переданная в filter() функцию, не вернет логическое значение?
    • О: Функция filter() ожидает, что полученная ею функция (включая лямбда-выражения) вернет логическое значение. Нелогические возвращаемые значения рассматриваются как правдивые или ложные. Другими словами, считаются непустые строки, ненулевые числа и другие ненулевые объекты True. Пустыми строками None считаются число ноль False.

Заключение

Молодцы, что завершили этот урок!

Теперь вы можете начать использовать функции filter() и lambda для фильтрации элементов в списке на основе того, что вам нужно в ваших программах Python.

Убедитесь, что примеры использования filter() в Python понятны, опробовав их в своей собственной оболочке Python или IDE.