0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Понятие "фильтрация" интуитивно понятно каждому человеку. Мы пьём фильтрованную воду и фильтруем то, что говорим. В программировании практически то же самое. Операция "фильтрация" по отношению к коллекции означает, что мы отбираем из неё только те элементы, которые удовлетворяют нужному условию. Типичная задача может выглядеть так - выбрать пользователей старше 10 лет:</p>
1
<p>Понятие "фильтрация" интуитивно понятно каждому человеку. Мы пьём фильтрованную воду и фильтруем то, что говорим. В программировании практически то же самое. Операция "фильтрация" по отношению к коллекции означает, что мы отбираем из неё только те элементы, которые удовлетворяют нужному условию. Типичная задача может выглядеть так - выбрать пользователей старше 10 лет:</p>
2
<p>Фильтрация встречается так же часто как отображение. Общая схема кода при фильтрации практически один в один как и в отображении, кроме пары ключевых моментов:</p>
2
<p>Фильтрация встречается так же часто как отображение. Общая схема кода при фильтрации практически один в один как и в отображении, кроме пары ключевых моментов:</p>
3
<ul><li>Фильтрация возвращает коллекцию либо того же размера, если ничего не было отфильтровано, либо меньшего. Она может вернуть даже пустую коллекцию, если ни один из элементов не подошёл.</li>
3
<ul><li>Фильтрация возвращает коллекцию либо того же размера, если ничего не было отфильтровано, либо меньшего. Она может вернуть даже пустую коллекцию, если ни один из элементов не подошёл.</li>
4
<li>Фильтрация всегда возвращает исходные элементы. Она никогда не делает отображение. Если на вход фильтрации поступил список пользователей, то список пользователей будет и на выходе.</li>
4
<li>Фильтрация всегда возвращает исходные элементы. Она никогда не делает отображение. Если на вход фильтрации поступил список пользователей, то список пользователей будет и на выходе.</li>
5
</ul><p>Теперь посмотрим, как выглядит фильтрация при использовании встроенной функции высшего порядка<a>filter()</a>:</p>
5
</ul><p>Теперь посмотрим, как выглядит фильтрация при использовании встроенной функции высшего порядка<a>filter()</a>:</p>
6
<p>Функция, передаваемая в filter(), должна быть предикатом. То есть её задача вернуть либо True, либо False для каждого элемента коллекции. Значение, которое возвращается, никак не используется - оно всего лишь говорит о том, включать ли текущий элемент или нет. Новички часто делают ошибку на этом этапе и начинают возвращать из фильтра то, что они бы хотели увидеть в результате, а для этого надо применять map().</p>
6
<p>Функция, передаваемая в filter(), должна быть предикатом. То есть её задача вернуть либо True, либо False для каждого элемента коллекции. Значение, которое возвращается, никак не используется - оно всего лишь говорит о том, включать ли текущий элемент или нет. Новички часто делают ошибку на этом этапе и начинают возвращать из фильтра то, что они бы хотели увидеть в результате, а для этого надо применять map().</p>
7
<p>На выходе функция возвращает, так же как и map(), итератор. Получить все элементы из итератора так же можно с помощью list()</p>
7
<p>На выходе функция возвращает, так же как и map(), итератор. Получить все элементы из итератора так же можно с помощью list()</p>
8
<h2>Реализация</h2>
8
<h2>Реализация</h2>
9
<p>Напишем свою собственную функцию my_filter(), работающую аналогично встроенной filter():</p>
9
<p>Напишем свою собственную функцию my_filter(), работающую аналогично встроенной filter():</p>
10
10