lambda tạo hàm ẩn danh một dòng. filter(func, iterable) lọc phần tử thoả mãn func. Kết hợp tạo code hàm gọn nhẹ.
Lambda Expression
lambda arguments: expression # Tương đương: # def func(arguments): # return expression
Filter Function
filter(function, iterable) -> iterator # Trả về iterator chứa các item mà function(item) == True
Ví dụ: Lọc số chẵn từ list
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Lambda trong filter result = filter(lambda x: x % 2 == 0, nums) # Chuyển iterator -> list print(list(result)) # [2, 4, 6, 8, 10]
Ví dụ nâng cao: Lọc dictionary/list of dicts
users = [
{'name': 'Alice', 'age': 25, 'active': True},
{'name': 'Bob', 'age': 17, 'active': False},
{'name': 'Charlie', 'age': 30, 'active': True},
{'name': 'David', 'age': 16, 'active': True}
]
# Lọc user active và >= 18 tuổi
adults = list(filter(lambda u: u['active'] and u['age'] >= 18, users))
print(adults)
# [{'name': 'Alice', 'age': 25, 'active': True}, {'name': 'Charlie', 'age': 30, 'active': True}]Kết hợp với map() và reduce()
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Pipeline: filter even -> map square -> reduce sum
total = reduce(
lambda a, b: a + b,
map(lambda x: x**2, filter(lambda x: x % 2 == 0, numbers))
)
print(total) # 4+16+36+64+100 = 220
# Pythonic hơn: generator expression
total = sum(x**2 for x in numbers if x % 2 == 0)
print(total) # 220Lưu ý
filtertrả về iterator (lazy evaluation), tiết kiệm bộ nhớ.- Lambda chỉ dành cho logic đơn giản (1 expression). Logic phức tạp → dùng
def. - Python 3:
filtertrả về iterator, Python 2 trả list. - Ưu tiên list comprehension/generator expression cho readability:
[x for x in nums if x%2==0].
Kết luận
Lambda + filter mạnh cho functional style. Trong Python hiện đại, list comprehension/generator thường được ưu tiên do dễ đọc hơn. Dùng filter khi function đã có sẵn hoặc chain nhiều phép biến đổi.