Нужно преобразовать 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 при первом же вызове.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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