← Все вопросы
Как объединить фильтр и преобразование в одном list comprehension?
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 — фильтр.
Ваш ответ
Войдите, чтобы ответить на вопрос.