Нужно преобразовать user_ids = [1, -1, 2] в список строк только для положительных значений. Какой вариант обычно читается проще?

A[str(x) for x in user_ids if x > 0]
Blist(map(str, filter(lambda x: x > 0, user_ids)))
Clist(map(lambda x: str(x), user_ids))
Dlist(filter(lambda x: str(x) > 0, user_ids))
Правильный ответ. Списочное включение с фильтром и преобразованием одним выражением читается короче связки map() + filter() + lambda.

Разбор

Запись [str(x) for x in user_ids if x > 0] сразу описывает: «возьми каждый x из списка, оставь положительные и приведи к строке». Вариант с map() и filter() делает то же самое, но добавляет вложенные функции и lambda. list(map(lambda x: str(x), user_ids)) преобразует все элементы, не отфильтровав отрицательные. В последнем варианте str(x) > 0 — это сравнение строки с числом: в Python 3 такой код вообще выбросит TypeError при первом же вызове.

Проверь себя · 1/3разбор после ответа
У вас есть список словарей users с ключами id и is_active. Нужно получить список идентификаторов только активных пользователей. Какое решение обычно проще читать, чем комбинация map и filter с анонимными функциями?
Тренировать Python в Telegram

Ещё вопросы по теме «Генераторы списков и встроенные функции»