← Все вопросы

Как объединить фильтр и преобразование в одном list comprehension?

Задан 12 месяцев назад422 просмотров2 ответа
11

Хочу из списка чисел оставить только чётные и сразу возвести их в квадрат. Делаю в два прохода (сначала фильтр, потом map). Можно ли в одном включении сразу и отфильтровать, и преобразовать?

2 ответа

19
✓ Принятый ответ — помог автору

Да, if в конце фильтрует, выражение слева преобразует:

nums = [1, 2, 3, 4, 5, 6]
result = [x**2 for x in nums if x % 2 == 0]
print(result)   # [4, 16, 36]

Порядок чтения: «возьми x**2 для каждого x из nums, если x чётное». Сначала отрабатывает if (фильтр), потом к прошедшим применяется выражение слева. Не путай с тернарником: if в конце — фильтр (может выкинуть элемент), а x if cond else y слева от for — выбор значения (выкинуть элемент не может).

Евгений Костенко Вот это про разницу «if в конце vs тернарник слева» — частая путаница, отлично · 11 месяцев назад
3

В конце if — фильтр.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект