Filter trong Python: Vua Sàng Lọc Data, Đừng Để Bị Lừa!
Python

Filter trong Python: Vua Sàng Lọc Data, Đừng Để Bị Lừa!

Author

Admin System

@root

Ngày xuất bản

19 Mar, 2026

Lượt xem

2 Lượt

filter

Anh em Gen Z thân mến,

Hôm nay anh Creyt sẽ "khai sáng" cho tụi em một món võ công cực kỳ lợi hại trong Python, đó là filter(). Nghe tên có vẻ khô khan nhưng tin anh đi, nó chính là "thần chú" giúp em sàng lọc data nhanh gọn lẹ, loại bỏ những thứ "rác rưởi" để giữ lại "tinh hoa" y như cách em lướt TikTok loại bỏ mấy cái video nhạt nhẽo vậy đó!

filter() là gì và để làm gì?

Thử tưởng tượng thế này: cuộc đời lập trình viên của em là một dòng chảy data không ngừng nghỉ. Có lúc em cần tìm "crush" trong một danh sách dài dằng dặc các bạn học, có lúc em cần lọc ra những chiếc áo "must-have" trong cả rừng đồ trên Shopee. Lúc đó, filter() chính là "bộ lọc thần kỳ" của em.

Về cơ bản, filter() trong Python là một hàm built-in (có sẵn) giúp em chọn lọc các phần tử từ một danh sách (hoặc bất kỳ đối tượng iterable nào khác) dựa trên một điều kiện nhất định. Nó sẽ đi qua từng phần tử, hỏi "Mày có đạt chuẩn không?", nếu "có" thì giữ lại, nếu "không" thì "next!". Kết quả trả về là một iterator (một dạng đối tượng "lười biếng", chỉ tạo ra giá trị khi em thực sự cần đến nó, cực kỳ hiệu quả về bộ nhớ).

Cấu trúc của nó đơn giản như đang giỡn:

filter(hàm_điều_kiện, iterable)

  • hàm_điều_kiện: Một hàm sẽ nhận từng phần tử của iterable làm đối số và trả về True (nếu muốn giữ lại) hoặc False (nếu muốn loại bỏ). Em có thể dùng lambda cho nhanh hoặc viết một hàm riêng.
  • iterable: Cái "đống" dữ liệu mà em muốn sàng lọc (list, tuple, set, string, etc.).

Code Ví Dụ Minh Hoạ: "Sàng Lọc Crush"

Giả sử em có một danh sách các số điểm của team mình trong một game nào đó, và em chỉ muốn biết những ai đạt điểm cao hơn 80 để "khao trà sữa".

# Danh sách điểm số của team
diem_so_team = [75, 92, 60, 88, 100, 55, 81, 70]

# Hàm điều kiện: kiểm tra xem điểm có lớn hơn 80 không
def la_diem_cao(diem):
    return diem > 80

# Dùng filter để lọc ra các điểm cao
diem_cao_iterator = filter(la_diem_cao, diem_so_team)

# Vì filter trả về iterator, ta cần chuyển nó thành list để dễ nhìn
list_diem_cao = list(diem_cao_iterator)

print(f"Những điểm số đủ điều kiện khao trà sữa là: {list_diem_cao}")

# Output: Những điểm số đủ điều kiện khao trà sữa là: [92, 88, 100, 81]

Thấy chưa? Dễ như ăn kẹo! Em cũng có thể dùng lambda cho gọn lẹ hơn nữa:

# Dùng lambda function trực tiếp
diem_cao_lambda = list(filter(lambda diem: diem > 80, diem_so_team))
print(f"Dùng lambda, điểm cao vẫn là: {diem_cao_lambda}")

# Output: Dùng lambda, điểm cao vẫn là: [92, 88, 100, 81]
Illustration

Mẹo và Best Practices từ anh Creyt:

  1. filter() vs. List Comprehensions: Đây là câu hỏi "muôn thuở" của dân học Python.

    • Khi nào dùng filter(): Khi em có một hàm điều kiện phức tạp (hoặc đã có sẵn), hoặc khi em làm việc với dữ liệu cực lớn và muốn tiết kiệm bộ nhớ (vì filter trả về iterator, nó "lười biếng" hơn).
    • Khi nào dùng List Comprehensions: Đối với các điều kiện lọc đơn giản, hoặc khi em vừa muốn lọc VÀ muốn biến đổi dữ liệu cùng lúc. List comprehensions thường được coi là "Pythonic" hơn và dễ đọc hơn cho các trường hợp phổ biến.
    # Ví dụ List Comprehension tương đương
    diem_cao_lc = [diem for diem in diem_so_team if diem > 80]
    print(f"Dùng list comprehension, điểm cao vẫn là: {diem_cao_lc}")
    

    Anh Creyt thường khuyên, nếu em chỉ lọc và điều kiện đơn giản, dùng List Comprehension đi. Nếu điều kiện phức tạp, tái sử dụng hàm, hoặc tối ưu bộ nhớ thì nghĩ đến filter().

  2. Nhớ list() nó lại! Đừng quên filter() trả về một iterator. Nếu em muốn nhìn thấy tất cả kết quả ngay lập tức hoặc muốn xử lý nó như một danh sách thông thường, hãy bọc nó trong list(), tuple(), hoặc set() nhé.

  3. Giữ hàm điều kiện "sạch sẽ": Hàm mà em truyền vào filter nên tập trung duy nhất vào việc kiểm tra điều kiện và trả về True/False. Đừng nhét quá nhiều logic hay side-effects vào đó, nó sẽ làm code khó hiểu và khó debug.

Góc học thuật Harvard (dễ hiểu tuyệt đối):

Từ góc độ "tầm cỡ quốc tế", filter() là một ví dụ điển hình của lập trình hàm (Functional Programming) trong Python. Nó hoạt động dựa trên nguyên tắc "first-class functions" (hàm có thể được truyền như đối số) và "lazy evaluation" (đánh giá lười biếng). Khi em gọi filter(), nó không chạy ngay lập tức qua toàn bộ iterable và tạo ra danh sách mới. Thay vào đó, nó tạo ra một "nhà máy" sản xuất các phần tử đủ điều kiện, và chỉ khi em yêu cầu (ví dụ: dùng for loop hoặc list()), "nhà máy" đó mới bắt đầu hoạt động, sản xuất từng phần tử một. Điều này cực kỳ hiệu quả khi em làm việc với các tập dữ liệu khổng lồ mà không muốn "ngốn" hết RAM của máy tính.

Ứng dụng thực tế:

filter() (hoặc các kỹ thuật lọc tương tự như list comprehension) được dùng khắp mọi nơi:

  • Shopee/Lazada/Tiki: Khi em lọc sản phẩm theo giá, màu sắc, thương hiệu, đánh giá 5 sao.
  • Facebook/Instagram: Lọc bài viết theo hashtag, lọc bạn bè đang online.
  • Netflix/Spotify: Lọc phim theo thể loại, lọc nhạc theo tâm trạng.
  • Phân tích dữ liệu (Data Analysis): Các thư viện như Pandas hay NumPy đều có các cơ chế lọc dữ liệu cực mạnh mẽ, thường là tối ưu hóa từ ý tưởng cốt lõi của filter. Em muốn lọc ra tất cả các khách hàng đã chi tiêu trên 1 triệu? filter là ý tưởng đằng sau đó.

Thử nghiệm của anh Creyt và khi nào nên dùng:

Anh Creyt đã từng "đau khổ" khi phải xử lý các file log hàng triệu dòng. Ban đầu, anh cứ cố gắng đọc hết vào bộ nhớ rồi mới lọc, và kết quả là máy tính "đứng hình". Sau đó, anh đã chuyển sang dùng filter() kết hợp với các kỹ thuật đọc file từng dòng một. Kết quả? Tốc độ nhanh hơn, bộ nhớ được giải phóng và anh có thể "chill" hơn rất nhiều.

Khi nào nên dùng filter() (hoặc kỹ thuật lọc dựa trên iterator):

  • Dữ liệu lớn: Khi em có một tập dữ liệu quá lớn không thể tải hết vào RAM cùng lúc.
  • Hiệu suất bộ nhớ là ưu tiên: Khi em muốn giảm thiểu việc sử dụng bộ nhớ.
  • Hàm điều kiện phức tạp/tái sử dụng: Khi hàm lọc của em khá phức tạp và em muốn tách nó ra thành một hàm riêng để dễ quản lý, hoặc muốn tái sử dụng hàm đó ở nhiều chỗ.
  • Chỉ cần duyệt một lần: Khi em chỉ cần duyệt qua các phần tử đủ điều kiện một lần duy nhất.

Vậy đó, filter() không chỉ là một hàm, nó là một "tư duy" trong lập trình giúp em xử lý data một cách thông minh và hiệu quả. Nắm vững nó, em sẽ trở thành "phù thủy" data trong mắt bạn bè! Keep coding, Gen Z!

Thuộc Series: Python

Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!

#tech #cyberpunk #laravel
Chỉnh sửa bài viết

Bình luận (0)

Vui lòng Đăng Nhập để Bình luận

Hỗ trợ Markdown cơ bản
Nguyễn Văn A
1 ngày trước

Tính năng này đỉnh quá ad ơi, chờ mãi mới thấy một blog Tiếng Việt có UI/UX xịn như vầy!