← Все вопросы
Чем map и filter отличаются от list comprehension и что читаемее?
8
Одно и то же можно записать через map/filter и через списковое включение:
list(map(lambda x: x*2, nums))
[x*2 for x in nums]
В чём разница на самом деле и что предпочесть в обычном коде?
3 ответа
19
Результат одинаковый, разница в стиле и мелких деталях. map/filter возвращают ленивый итератор (его надо обернуть в list(), чтобы увидеть), а comprehension сразу строит список. Когда внутри нужна lambda, comprehension почти всегда читаемее:
# фильтр + преобразование в одну строку
[x*2 for x in nums if x > 0]
# через map+filter то же самое выглядит громоздко
list(map(lambda x: x*2, filter(lambda x: x > 0, nums)))
В официальном стиле Python comprehension предпочтительнее, когда есть lambda. А вот map(str, nums) с готовой функцией без lambda — коротко и нормально.
Богдан Соболев map с уже готовой функцией (map(int, parts)) — единственный случай, где он реально лаконичнее · 2 месяца назад
8
В обычном коде бери comprehension — читаемее и не нужен list(). map/filter оставь для случаев с готовой функцией (map(int, parts)).
-4
map быстрее работает всегда, поэтому он лучше.
Эльвира Козлова Это не так: для случая с lambda map не быстрее, а часто медленнее из-за вызова функции на каждый элемент. Разница вообще обычно незначима · 2 месяца назад
Ваш ответ
Войдите, чтобы ответить на вопрос.