Hàm filter() lọc các phần tử của iterable (list, tuple, set...) dựa trên một hàm điều kiện (predicate function).
Cú pháp
filter(function, iterable)
- function: Hàm trả về True/False cho mỗi phần tử
- iterable: Dữ liệu cần lọc (list, tuple, set...)
Trả về iterator (Python 3), cần list() để xem kết quả.
Ví dụ: Lọc tháng không có 30 ngày
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']
# Tháng có 31 ngày
months_31 = ['Jan', 'Mar', 'May', 'Jul', 'Aug', 'Oct', 'Dec']
def has_31_days(month):
return month in months_31
# Lọc
result = filter(has_31_days, months)
print("Tháng có 31 ngày:", list(result))
Kết quả
Tháng có 31 ngày: ['Jan', 'Mar', 'May', 'Jul', 'Aug']
Dùng lambda (ngắn gọn hơn)
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] months_31 = ['Jan', 'Mar', 'May', 'Jul', 'Aug', 'Oct', 'Dec'] result = filter(lambda m: m in months_31, months) print(list(result))
So sánh với list comprehension
# filter() list(filter(lambda x: x > 5, [1, 6, 3, 8])) # [6, 8] # List comprehension (thường ưu tiên trong Python) [x for x in [1, 6, 3, 8] if x > 5] # [6, 8]
List comprehension thường đọc dễ hơn và nhanh hơn. Dùng filter() khi hàm lọc phức tạp, tái sử dụng, hoặc lập trình functional.