Функция 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]]