datarekha
Python Easy Asked at AmazonAsked at Google

When should you use lambda, map, filter, and reduce — and when should you avoid them?

The short answer

lambda, map, and filter are concise for simple one-liners passed to higher-order functions, but list/generator comprehensions are usually more readable. reduce belongs in functools and is best reserved for cases where the fold operation is non-trivial; an explicit loop is often clearer.

How to think about it

What the interviewer is really asking

This is partly a readability / style question. The interviewer wants to know you understand what each tool does, can use them correctly, and — crucially — that you know when a comprehension is a better choice. Overusing lambda / map / filter is a code smell; never using them when they’d be clean is also a miss.

The tools, one by one

lambda is an anonymous single-expression function. Its main job is to be passed inline to another function:

square = lambda x: x ** 2
sorted_pairs = sorted(pairs, key=lambda p: p[1])   # idiomatic use

map applies a function to every element and returns a lazy iterator:

scores = [0.9, 0.4, 0.7]
labels = list(map(lambda s: "pass" if s >= 0.5 else "fail", scores))
# Equivalent comprehension (usually preferred for readability):
labels = ["pass" if s >= 0.5 else "fail" for s in scores]

filter keeps elements where the predicate is truthy, also a lazy iterator:

evens = list(filter(lambda x: x % 2 == 0, range(10)))
# Equivalent comprehension:
evens = [x for x in range(10) if x % 2 == 0]

reduce folds a sequence into a single accumulated value — it requires an import because Guido considered it less essential:

from functools import reduce
product = reduce(lambda acc, x: acc * x, [1, 2, 3, 4, 5])  # 120
# Often clearer:
import math
product = math.prod([1, 2, 3, 4, 5])

Interactive playground — all four together

When each tool shines — and when to reach for a comprehension instead

  • lambda with sorted, max, min as the key argument — clean and conventional, keep it.
  • map when passing an already-named function: map(str, nums) beats [str(x) for x in nums] slightly.
  • filter similarly: filter(None, values) removes falsy elements cleanly.
  • reduce when expressing a mathematical left-fold makes intent obvious — function composition, tree folding.

For anything more complex than a single expression, a comprehension wins on readability every time.

Learn it properly Functions

Keep practising

All Python questions

Explore further

Skip to content