В этом уроке вы узнаете, как фильтровать элементы списка с помощью встроенной функции 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]]
