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

Hàm filter() trong Python: Hướng dẫn từng bước

Phương thức filter() trong Python được dùng để lọc danh sách (list), tập hợp (set) và tuple. filter() tuân theo các tiêu chí cung cấp để lọc đối tượng lặp (iterable), và trả về kết quả đã lọc.


Khi lập trình, bạn có thể có một danh sách giá trị muốn lọc theo cách nào đó. Ví dụ, bạn có danh sách đơn hàng bánh quy và chỉ muốn trả về những đơn có socola, do một đầu bếp cụ thể xử lý.

Đó là lúc phương thức filter() trong Python xuất hiện. filter() có thể dùng để lọc một danh sách dựa trên tập tiêu chí định sẵn và trả về một iterable chứa dữ liệu đã lọc.

Trong hướng dẫn này, chúng ta sẽ thảo luận về phương thức filter() và cách sử dụng trong mã. Chúng ta cũng sẽ đi qua một vài ví dụ hàm trong mã Python.

Filter trong Python

Danh sách (list) là kiểu dữ liệu trong Python dùng để lưu nhiều giá trị với chủ đề chung. Ví dụ, bạn có thể dùng danh sách để lưu tất cả quần áo một cửa hàng thời trang địa phương đang bán, hoặc lưu danh sách tên ngôn ngữ lập trình.

Thường khi làm việc với danh sách, bạn sẽ muốn lọc danh sách dựa trên tập tiêu chí. Ví dụ, bạn điều hành rạp chiếu phim và muốn biết có bao nhiêu người dưới 18 tuổi xem phim tại khu phức hợp rạp của bạn.

filter(), một hàm tích hợp sẵn, có thể dùng để lọc danh sách và trả về một iterator. Cú pháp cho phương thức filter():

filter(function, iterable_object)

Phương thức filter() nhận hai tham số:

81% người tham gia cho biết họ cảm thấy tự tin hơn về cơ hội việc làm công nghệ sau khi tham gia bootcamp. Được ghép nối với bootcamp ngay hôm nay.

Sinh viên trung bình tốt nghiệp bootcamp mất chưa đến sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được việc đầu tiên.

  • function là mã được chạy trên mỗi mục trong iterable bạn chỉ định (bắt buộc). Hàm sẽ kiểm tra xem iterable trả về True hay False.
  • iterable_object là đối tượng bạn muốn lọc (bắt buộc).

Đối tượng iterable bạn chỉ định có thể là bất kỳ iterable nào như lists, sets, và tuples trong Python.

Ví dụ về Python Filter

Hãy chạy qua một ví dụ để chứng minh cách phương thức này được dùng.

Giả sử bạn điều hành một quầy tạp chí và muốn kiểm tra xem có cần đặt hàng tồn kho mới không. Nếu bạn có dưới 20 ấn bản của bất kỳ tạp chí nào, bạn cần đặt hàng mới; nếu có trên 20 ấn bản, bạn không cần đặt. Bạn có danh sách số lượng tạp chí.

Để kiểm tra xem có cần đặt hàng cho tạp chí nào, bạn có thể dùng mã sau:

quantities = [25, 49, 21, 17, 14, 28] def checkQuantities(mags): if mags < 20: return True else: return False filtered_mags = filter(checkQuantities, quantities) print(list(filtered_mags))

Mã trả về: [17, 14]

Hãy phân tích mã. Dòng đầu, chúng ta định nghĩa biến quantities lưu số ấn bản mỗi tạp chí trong kho.

Sau đó, định nghĩa hàm checkQuantities kiểm tra xem có dưới 20 ấn bản tạp chí cụ thể nào trong kho không. Nếu dưới 20, hàm checkQuantities trả về True; ngược lại trả về False.

Tiếp theo, dùng phương thức filter() chỉ định checkQuantities làm hàm và quantities làm iterable object. Điều này yêu cầu filter() thực thi checkQuantities trên mọi mục trong mảng quantities.

Sau đó, in kết quả filter(), dùng list() chuyển thành list. Điều này quan trọng vì filter() trả về đối tượng đã lọc, không phải list. Vì vậy, nếu muốn xem dữ liệu, cần chuyển thành list.

Như bạn thấy, mã trả về hai giá trị: 17 và 14. Cả hai đều dưới 20, nghĩa là chương trình hoạt động như mong đợi.

Hãy xem ví dụ khác để thấy phương thức hoạt động thế nào. Giả sử chúng ta là huấn luyện viên nhảy và muốn biết tuổi mọi người trong lớp từ 7 đến 10, bao gồm cả 7 và 10. Chúng ta có thể dùng mã sau:

student_ages = [7, 9, 8, 10, 11, 11, 8, 9, 12] def checkAges(ages): if ages >= 7 and ages <= 10: return True else: return False filtered_ages = filter(checkAges, student_ages) print(list(filtered_ages))

Mã trả về: [7, 9, 8, 10, 8, 9]. Như bạn thấy, chương trình đã lọc ra học sinh từ 7 đến 10 tuổi từ các phần tử danh sách, bao gồm cả 7 và 10. Danh sách kết quả chứa dữ liệu đã lọc.

Python Filter với Lambda

Để làm thao tác lọc hiệu quả hơn, chúng ta có thể dùng hàm Lambda bản đồ danh sách. Lambda là hàm đặc biệt được định nghĩa không tên và có thể dùng để viết hàm ẩn danh một dòng ngắn gọn trong Python.

Ví dụ, lấy ví dụ số lượng tạp chí từ trên. Trong ví dụ đó, chúng ta tạo hàm kiểm tra có dưới 20 ấn bản tạp chí trong kho không và dùng filter() thực thi hàm trên danh sách tạp chí. Sau đó, chương trình trả về danh sách mọi tạp chí có dưới 20 ấn bản.

Chúng ta có thể dùng hàm Lambda thực hiện hành động tương tự, nhưng hiệu quả hơn. Đây là mã có thể dùng:

quantities = [25, 49, 21, 17, 14, 28] filtered_mags = filter(lambda mag: mag < 20, quantities) print(list(filtered_mags))

Mã trả về: [17, 14].

Như bạn thấy, đầu ra giống hệt nhau, nhưng mã ngắn gọn hơn đáng kể. Thay vì định nghĩa toàn bộ hàm, chúng ta dùng Lambda định nghĩa hàm một dòng.

Hàm một dòng này kiểm tra có dưới 20 bản sao tạp chí trong kho không, và trả về True cho iterator filter() nếu đúng. Sau thực thi, chương trình trả về list với hai giá trị: 17 và 14.

Kết luận

Hàm filter() trong Python có thể dùng để lọc đối tượng iterable dựa trên tập tiêu chí định sẵn và trả về iterable đã lọc. Phương pháp này hữu ích nếu bạn có danh sách dữ liệu chỉ muốn lấy giá trị đáp ứng tiêu chí nhất định.

Trong hướng dẫn này, chúng ta thảo luận cú pháp phương thức filter() và cách dùng trong Python. Chúng ta khám phá vài ví dụ filter() thực tế, rồi xem cách filter() dùng với hàm Lambda Python để làm mã hiệu quả hơn.

Bây giờ bạn đã trang bị thông tin cần thiết để dùng filter() như chuyên gia Python!