Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hàm filter() trong Python: Lọc phần tử theo điều kiện

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.