Cách sử dụng hàm filter() trong Python
Tìm hiểu cách sử dụng hàm filter() của Python để trích xuất các phần tử từ bộ sưu tập. So sánh bộ lọc với khả năng hiểu danh sách và lệnh gọi lại lambda.
Tổng quan
Lọc dữ liệu là một nhiệm vụ cốt lõi trong lập trình ứng dụng. Bạn thường sẽ cần tìm kiếm trong danh sách và trích xuất các phần tử đáp ứng tiêu chí cụ thể, chẳng hạn như trích xuất người dùng đang hoạt động từ cơ sở dữ liệu hồ sơ hoặc lọc số âm từ nhật ký cảm biến. Python cung cấp một công cụ chức năng tích hợp có tên là `filter()` cho mục đích này.
Hàm `filter(function, iterable)` nhận một hàm lọc và một iterable làm đối số. Đối số của hàm phải trả về giá trị boolean (`True` hoặc `False`) cho mỗi phần tử. Hàm `filter()` đánh giá từng phần tử, chỉ giữ lại những phần tử đánh giá là `True` và trả về một đối tượng iterator (đối tượng `filter`) chứa kết quả.
Giống như `map()`, `filter()` đánh giá các phần tử một cách lười biếng. Nếu bạn cần một danh sách tiêu chuẩn ngay lập tức, bạn truyền kết quả đầu ra bằng cách sử dụng hàm tạo `list()`: `list(filter(func, data))`. Nếu bạn chuyển `None` làm tham số hàm (ví dụ: `filter(None, data)`), Python sẽ tự động lọc ra tất cả các phần tử sai, đây là một cách viết tắt tuyệt vời để xóa các giá trị trống.
Đầu ra mã & thực thi
Tập lệnh này minh họa việc lọc mảng số, trích xuất các mục từ điển và loại bỏ các chuỗi trống giả bằng filter().
numbers = [-5, -2, 0, 3, 8, -1]
# 1. Filter positive numbers using a lambda function
positives = list(filter(lambda x: x > 0, numbers))
print("Positives only:", positives)
# 2. Filter list of strings by character length
words = ["cat", "elephant", "dog", "giraffe"]
long_words = list(filter(lambda w: len(w) > 4, words))
print("Words longer than 4 chars:", long_words)
# 3. Shorthand: Remove all falsy values from a list by passing None
mixed_data = ["hello", "", "world", None, False, "active"]
clean_data = list(filter(None, mixed_data))
print("Falsy values removed:", clean_data)Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']Triển khai từng bước
- Xác định hàm chấp nhận một phần tử và trả về giá trị boolean đại diện cho tiêu chí lọc.
- Gọi filter(function, iterable) để tạo một trình lặp lặp lười biếng của các kết quả khớp.
- Truyền đối tượng bộ lọc kết quả vào danh sách bằng cách sử dụng list(filter(...)) nếu bạn cần thao tác với các bản ghi.
- Chuyển Không làm đối số hàm để lọc ra tất cả các giá trị giả (như Không, 0 và chuỗi trống).
Câu hỏi thường gặp
Điều gì xảy ra nếu hàm được truyền cho filter() không trả về boolean?
Python đánh giá tính trung thực của giá trị trả về. Nếu giá trị được đánh giá là True trong ngữ cảnh boolean thì phần tử sẽ được giữ lại.
Tôi có nên sử dụng filter() hoặc hiểu danh sách không?
Việc hiểu danh sách với điều kiện if (ví dụ: [x for x in list if condition]) thường được ưu tiên vì dễ đọc, nhưng filter() sạch sẽ và có hiệu suất cao, đặc biệt khi sử dụng các hàm dựng sẵn hiện có.
Chủ đề liên quan
Tìm hiểu cách sử dụng hàm lambda trong Python. Nắm vững các hàm ẩn danh, lệnh gọi lại nội tuyến và sắp xếp dữ liệu danh sách bằng khóa lambda.
Cách sử dụng tính năng hiểu danh sách trong PythonTìm hiểu cách sử dụng tính năng hiểu danh sách trong Python. Viết các vòng lặp ngắn gọn, áp dụng các bộ lọc có điều kiện và xây dựng ma trận bằng cú pháp trực quan rõ ràng.
Cách sử dụng hàm map() trong PythonTìm hiểu cách sử dụng hàm map() của Python. Nắm vững cách áp dụng các hàm cho các vòng lặp mà không cần viết vòng lặp và so sánh bản đồ với khả năng hiểu danh sách.
Tài nguyên Python được đề xuất
Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.
Hàm Python
Làm chủ các hàm Python. Tìm hiểu cách viết mã có thể sử dụng lại bằng cách sử dụng def, xác định đối số, trả về giá trị và hiểu phạm vi cục bộ và toàn cầu.
Bảng tóm tắt các chức năng của mô-đun toán học Python
Hướng dẫn tham khảo nhanh thư viện chuẩn toán Python. Tìm hiểu cách sử dụng các hàm lượng giác, logarit, làm tròn và số học.
Python vs JavaScript: Ngôn ngữ lập trình nào tốt nhất?
So sánh toàn diện giữa Python và JavaScript. Khám phá sự khác biệt về cú pháp, hiệu suất, trường hợp sử dụng (phụ trợ so với giao diện người dùng) và các ví dụ về mã hóa.