Фильтрация списков

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
39
Москва, РФ
ФИЛЬТРАЦИЯ СПИСКОВ

Основной задачей фильтрации списков обычно является получение такого списка, элементы которого отвечают предустановленным условиям, а все прочие элементы отсеиваются. Разумеется, мы предполагаем, что у нас есть некий исходный список.

Для реализации фильтрации служит функция filter из стандартной библиотеки python

Первым аргументом она принимает функцию фильтрации (callable объект), аргументом которой будет передан каждый элемент списка. Функция должна вернуть булево значение: True - если элемент должен остаться в списке, или False, если элемент из списка должен быть исключен.

Рассмотрим на примере:
Допустим, у нас есть всё тот же список [1,2,3,4,5,6,7,8,9]
Мы хотим оставить в нем только чётные числа.
Опишем функцию фильтрации:
Python:
def is_even(x):
    return not x%2
Здесь мы проверяем, что остаток от деления числа на 2 равен нулю (четное число), что соответствует булеву False, и поскольку нам нужно возвращать в этом случае True - мы меняем его булево значение на противоположное оператором not
Теперь отфильтруем наш список:
Python:
lst = [1,2,3,4,5,6,7,8,9]
newlst = list(filter(is_even,lst))
Теперь наш список newlst содержит только четные элементы: [2, 4, 6, 8]

Как и в случае с маппингом, filter возвращает итерируемый объект, а не список. Если нужен именно список (или кортеж) его нужно привести к этому виду соответствующим методом list() или tuple(). Отмечу, однако, что если с результатом фильтра планируется просто провести работу как с итерируемой величиной (простейший, но самый частый случай) - дополнительных преобразований не требуется. Можно работать прямо с объектом filter
 

Форум IT Специалистов