📝 Python

filter() — Отбери нужное!

P
Автор
PyLand Team
📅
Опубликовано
03.04.2026
⏱️
Время чтения
3 мин
👁️
Просмотров
430
🌿
Уровень
Средний

Функция filter() оставляет элементы, для которых проверка возвращает истинное значение.

Что такое filter()?

filter() отбирает элементы, для которых функция-проверка возвращает True.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Старый способ
even = []
for num in numbers:
    if num % 2 == 0:
        even.append(num)

# С filter()
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)  # [2, 4, 6, 8, 10]

Синтаксис

filter(функция_проверки, итерируемый_объект)
  • функция_проверки — должна возвращать True / False
  • Возвращает объект filter — оборачивай в list(), чтобы получить список

Базовые примеры

Числа

numbers = [5, 12, 3, 18, 25, 7]

# Больше порога
above_10 = list(filter(lambda x: x > 10, numbers))
print(above_10)  # [12, 18, 25]

# Положительные (с именованной функцией)
def is_positive(x):
    return x > 0

mixed = [-5, 2, -3, 8, 0, -1, 10]
positive = list(filter(is_positive, mixed))
print(positive)  # [2, 8, 10]

Строки

words = ["python", "javascript", "go", "java", "typescript"]

# Содержат "script"
with_script = list(filter(lambda w: "script" in w, words))
print(with_script)  # ['javascript', 'typescript']

# Начинаются с "j"
starts_j = list(filter(lambda w: w.startswith("j"), words))
print(starts_j)  # ['javascript', 'java']

Словари

students = [
    {"name": "Алиса", "grade": 95},
    {"name": "Боб",   "grade": 67},
    {"name": "Карл",  "grade": 88},
    {"name": "Дима",  "grade": 72}
]

# Оценка >= 80
high_performers = list(filter(lambda s: s["grade"] >= 80, students))
for s in high_performers:
    print(s["name"], s["grade"])
# Алиса 95
# Карл 88

# Провалили (< 70)
failed = list(filter(lambda s: s["grade"] < 70, students))
print([s["name"] for s in failed])  # ['Боб']

Множественные условия

numbers = [5, 12, 3, 18, 25, 7, 30]

# Чётные И больше 10
result = list(filter(lambda x: x % 2 == 0 and x > 10, numbers))
print(result)  # [12, 18, 30]

# Меньше 10 ИЛИ больше 20
result = list(filter(lambda x: x < 10 or x > 20, numbers))
print(result)  # [5, 3, 25, 7, 30]

Сложный пример

products = [
    {"name": "Телефон",  "price": 500,  "in_stock": True},
    {"name": "Ноутбук",  "price": 1200, "in_stock": False},
    {"name": "Мышь",     "price": 25,   "in_stock": True},
    {"name": "Монитор",  "price": 300,  "in_stock": True}
]

# В наличии И цена < 600
affordable = list(filter(
    lambda p: p["in_stock"] and p["price"] < 600,
    products
))

for p in affordable:
    print(f"{p['name']}: ${p['price']}")
# Телефон: $500
# Мышь: $25
# Монитор: $300

filter() vs List Comprehension

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# filter()
even_filter = list(filter(lambda x: x % 2 == 0, numbers))

# List comprehension
even_comp = [x for x in numbers if x % 2 == 0]

print(even_filter == even_comp)  # True

filter() удобен, когда уже есть готовая функция-проверка:

def is_adult(person):
    return person["age"] >= 18

adults = list(filter(is_adult, people))

Comprehension удобнее, когда нужно одновременно фильтровать и преобразовывать:

adult_names = [p["name"] for p in people if p["age"] >= 18]

Распространённые ошибки

Ошибка 1: Забыли list()

numbers = [1, 2, 3, 4, 5]

result = filter(lambda x: x > 2, numbers)
print(result)  # <filter object at 0x...>  — не список!

# ✅ ПРАВИЛЬНО
result = list(filter(lambda x: x > 2, numbers))
print(result)  # [3, 4, 5]

Ошибка 2: filter(None) убирает 0

data = [0, 5, 10, 15]

# filter(None) уберёт 0!
result = list(filter(None, data))
print(result)  # [5, 10, 15]  ← 0 исчез

# Если 0 — валидное значение:
result = list(filter(lambda x: x is not None, data))
print(result)  # [0, 5, 10, 15]

filter(None, data) удаляет все “ложные” значения: None, False, 0, "", [], {}.


filter() + map()

Сначала отбираем, потом преобразуем:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Чётные → удвоить
result = list(map(lambda x: x * 2, filter(lambda x: x % 2 == 0, numbers)))
print(result)  # [4, 8, 12, 16, 20]

# То же через comprehension
result = [x * 2 for x in numbers if x % 2 == 0]
print(result)  # [4, 8, 12, 16, 20]

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Как функции работают вместе в Python 🧩

Небольшая функция обычно решает одну понятную задачу. Но настоящая программа состоит из нескольких задач: получить...

📅 09.08.2026 👁️ 78
📝

map() — Преобразуй каждый элемент!

Функция map() лениво применяет преобразование к каждому элементу итерируемого объекта.

📅 03.04.2026 👁️ 429
📝

Lambda функции

Lambda — маленькая анонимная функция в одну строку.

📅 03.04.2026 👁️ 416

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!