Функция filter() в Python и пример фильтрации списка

В этом уроке вы узнаете, как фильтровать элементы списка с помощью встроенной функции Python filter().

Что такое функция filter() в Python?

Иногда вам нужно перебирать элементы списка и выбирать некоторые из них на основе заданных критериев.

Предположим, что у вас есть следующий список оценок:

scores = [70, 60, 80, 90, 50]

Чтобы получить все элементы из списка оценок, где каждый элемент больше или равен 70, вы используете следующий код:

scores = [70, 60, 80, 90, 50]

filtered = []

for score in scores:
    if score >= 70:
        filtered.append(score)

print(filtered)

Как это работает.

  • Сначала определите пустой список (отфильтрованный), который будет содержать элементы из списка оценок.
  • Во-вторых, переберите элементы списка оценок. Если элемент больше или равен 70, добавьте его в отфильтрованный список.
  • В-третьих, покажите отфильтрованный список на экране.

В Python есть встроенная функция filter(), которая позволяет более красиво фильтровать список (или кортеж).

Ниже показан синтаксис функции filter():

filter(fn, list)

Функция filter() перебирает элементы списка и применяет функцию fn() к каждому элементу. Она возвращает итератор для элементов, где fn() возвращает True. Фактически, во второй аргумент функции filter() можно передать любую итерацию, а не только список.

Ниже показано, как использовать функцию filter() для возврата списка оценок, каждая из которых больше или равна 70:

scores = [70, 60, 80, 90, 50]
filtered = filter(lambda score: score >= 70, scores)

print(list(filtered))

Выход:

[70, 80, 90]

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

Фильтрация списка кортежей с помощью функции filter()

Предположим, у вас есть следующий список кортежей:

countries = [
    ['China', 1394015977],
    ['United States', 329877505],
    ['India', 1326093247],
    ['Indonesia', 267026366],
    ['Bangladesh', 162650853],
    ['Pakistan', 233500636],
    ['Nigeria', 214028302],
    ['Brazil', 21171597],
    ['Russia', 141722205],
    ['Mexico', 128649565]
]

Каждый элемент списка представляет собой кортеж, содержащий название страны и население.

Чтобы получить все страны с населением более 300 миллионов человек, вы можете использовать функцию filter() следующим образом:

countries = [
    ['China', 1394015977],
    ['United States', 329877505],
    ['India', 1326093247],
    ['Indonesia', 267026366],
    ['Bangladesh', 162650853],
    ['Pakistan', 233500636],
    ['Nigeria', 214028302],
    ['Brazil', 21171597],
    ['Russia', 141722205],
    ['Mexico', 128649565]
]

populated = filter(lambda c: c[1] > 300000000, countries)

print(list(populated))

Выход:

[['China', 1394015977], ['India', 1326093247], ['United States', 329877505]]
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *