Lambda with filter() in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When using lambda functions with filter(), it's important to know how the program's running time changes as the input list grows.
We want to find out how many times the filter checks each item as the list gets bigger.
Analyze the time complexity of the following code snippet.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered = list(filter(lambda x: x % 2 == 0, numbers))
print(filtered)
This code filters out even numbers from a list using a lambda function inside filter().
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The filter function applies the lambda check to each item in the list.
- How many times: Once for every item in the input list.
As the list gets bigger, the number of checks grows directly with the number of items.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The number of operations grows in a straight line with the input size.
Time Complexity: O(n)
This means the time to filter grows evenly as the list gets longer.
[X] Wrong: "Using lambda with filter() makes the code run faster than a normal loop."
[OK] Correct: Lambda with filter() still checks every item once, so it takes about the same time as a loop.
Understanding how filter and lambda work together helps you explain how your code handles data efficiently in real projects.
"What if we changed the input from a list to a generator? How would the time complexity change?"
Practice
filter(lambda x: x > 5, [2, 7, 4, 10])Solution
Step 1: Understand the lambda condition
The lambda function checks if each number is greater than 5.Step 2: Apply filter with the lambda
filter() keeps only numbers where the lambda returns True, so numbers > 5.Final Answer:
Selects numbers greater than 5 from the list -> Option AQuick Check:
filter with lambda x > 5 = select numbers > 5 [OK]
- Thinking filter sums or sorts the list
- Confusing greater than with less than
- Assuming filter changes the original list
nums using lambda and filter?Solution
Step 1: Identify condition for even numbers
Even numbers have zero remainder when divided by 2, so x % 2 == 0.Step 2: Check filter syntax
filter(lambda x: x % 2 == 0, nums) correctly filters even numbers.Final Answer:
filter(lambda x: x % 2 == 0, nums) -> Option AQuick Check:
Even check = x % 2 == 0 [OK]
- Using floor division (//) instead of modulo (%)
- Using x % 2 without comparison (filters odd numbers)
- Checking equality to 2 instead of remainder zero
nums = [1, 3, 6, 8, 11] result = list(filter(lambda x: x < 7, nums)) print(result)
Solution
Step 1: Understand the filter condition
The lambda keeps numbers less than 7.Step 2: Apply condition to each list item
1 < 7 (keep), 3 < 7 (keep), 6 < 7 (keep), 8 < 7 (no), 11 < 7 (no).Final Answer:
[1, 3, 6] -> Option DQuick Check:
Filter x < 7 = [1, 3, 6] [OK]
- Including numbers not meeting condition
- Confusing less than with greater than
- Not converting filter object to list before printing
nums = [10, 15, 20] filtered = filter(lambda x: x % 2 = 0, nums) print(list(filtered))
Solution
Step 1: Check lambda condition syntax
The condition uses '=' which is assignment, not comparison.Step 2: Correct operator usage
It should be '==' to compare if x % 2 equals 0.Final Answer:
Using '=' instead of '==' in lambda condition -> Option CQuick Check:
Comparison needs '==' not '=' [OK]
- Using '=' instead of '==' in conditions
- Forgetting to convert filter result to list
- Missing lambda argument
words = ['apple', '', 'banana', ' ', 'cherry', None]. Which code correctly filters out empty strings, strings with only spaces, and None values using lambda and filter?Solution
Step 1: Understand filtering criteria
We want to remove empty strings (''), strings with only spaces (' '), and None values.Step 2: Analyze each option
list(filter(lambda x: x and x.strip(), words)) checks x is truthy (not None or empty) and x.strip() removes spaces; if non-empty after strip, it keeps the word.Final Answer:
list(filter(lambda x: x and x.strip(), words)) -> Option BQuick Check:
Filter removes empty, spaces, None with x and x.strip() [OK]
- Filtering only empty strings but not spaces or None
- Checking equality to None incorrectly
- Calling strip() on None causing error
