Краткое описание: в этом уроке вы узнаете, как фильтровать элементы списка с помощью встроенной функции Python filter()
.
Введение в функцию Python filter()
Иногда требуется перебрать элементы списка и выбрать некоторые из них на основе заданных критериев.
Предположим, что у вас есть следующий список scores
:
Code language: Python (python)scores = [70, 60, 80, 90, 50]
Чтобы получить все элементы из списка scores
, где каждый элемент больше или равен 70, вы используете следующий код:
Code language: Python (python)scores = [70, 60, 80, 90, 50] filtered = [] for score in scores: if score >= 70: filtered.append(score) print(filtered)
Как это работает.
- Во-первых, определите пустой список (
filtered
), который будет содержать элементы из спискаscores
. - Во-вторых, выполните итерации над элементами списка
scores
. Если элемент больше или равен 70, добавьте его в списокfiltered
. - В-третьих, выведите список
filtered
на экран.
В Python есть встроенная функция filter()
, которая позволяет фильтровать список (или кортеж) более красивым способом.
Ниже показан синтаксис функции filter()
:
Code language: Python (python)filter(fn, list)
Функция filter()
выполняет итерацию по элементам списка
и применяет функцию fn()
к каждому элементу. Она возвращает итератор для элементов, где fn()
возвращает True
.
На самом деле, во второй аргумент функции filter()
можно передать любой итератор, а не только список.
Ниже показано, как использовать функцию filter()
для возврата списка scores
, в котором каждый балл больше или равен 70:
Code language: Python (python)scores = [70, 60, 80, 90, 50] filtered = filter(lambda score: score >= 70, scores) print(list(filtered))
Вывод:
Code language: Python (python)[70, 80, 90]
Поскольку функция filter()
возвращает итератор, вы можете использовать цикл for
для итерации по нему. Или вы можете использовать функцию list()
для преобразования итератора в список.
Использование функции Python filter() для фильтрации списка кортежей пример
Предположим, у вас есть следующий список кортежей:
Code language: Python (python)countries = [ ['China', 1394015977], ['United States', 329877505], ['India', 1326093247], ['Indonesia', 267026366], ['Bangladesh', 162650853], ['Pakistan', 233500636], ['Nigeria', 214028302], ['Brazil', 21171597], ['Russia', 141722205], ['Mexico', 128649565] ]
Каждый элемент списка представляет собой кортеж, содержащий название страны и численность населения.
Чтобы получить все страны, население которых превышает 300 миллионов, можно использовать функцию filter()
следующим образом:
Code language: Python (python)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))
Вывод:
Code language: Python (python)[['China', 1394015977], ['India', 1326093247], ['United States', 329877505]]
Сводка
- Используйте функцию Python
filter()
для фильтрации списка (или кортежа).