Hướng dẫn python filter - bộ lọc trăn

Hàm filter() trong Python lọc ra các phần tử theo điều kiện của hàm func từ list, dict… Hàm này sẽ chỉ trả về những giá trị mà điều kiện trong func chấp nhận (có nghĩa là True). Cú pháp của hàm filter() như thế nào, nó có những tham số gì và cách sử dụng ra sao? Mời bạn đọc theo dõi.

Nội dung chính ShowShow

  • Các tham số của hàm filter()
  • Ví dụ : Hàm filter() hoạt động thế nào?
  • Ví dụ 2: filter() hoạt động không cần func.
  • Đăng nhập
  • Sử dụng filter() với một hàm
  • Sử dụng None có filter()
  • Sử dụng filter() với Danh sách Từ điển
  • Kết luận

filter(func, iterable)

Các tham số của hàm filter()

Ví dụ : Hàm filter() hoạt động thế nào?

  • Ví dụ 2: filter() hoạt động không cần func.
  • Đăng nhập

Ví dụ : Hàm filter() hoạt động thế nào?

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)

Ví dụ 2: filter() hoạt động không cần func.

Các nguyên âm được lc là: a e i o

Đăng nhập

Sử dụng filter() với một hàm

Ví dụ 2: filter() hoạt động không cần func.

# random list # viết bởi Quantrimang.com randomList = [1, 'a', 0, False, True, '0'] filteredList = filter(None, randomList) print('Các phần tử được lọc là:') for element in filteredList: print(element)

Ví dụ 2: filter() hoạt động không cần func.

Các phn t được lc là: 1 a True 0

Đăng nhập

Đăng nhập

Sử dụng filter() với một hàm

Sử dụng None có filter()

Sử dụng filter() với Danh sách Từ điển

filter(function, iterable)

Kết luận

Hàm filter() có 2 tham số:

func: là hàm điều kiện để kiểm tra các phần tử trong interable là đúng hay sai, func chỉ có thể trả về True hoặc False.

Sử dụng filter() với một hàm

Sử dụng None có filter()

Sử dụng filter() với Danh sách Từ điển

filter(lambda item: item[] expression, iterable)

Kết luận

creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie']

Hàm filter() có 2 tham số:

print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names)))

func: là hàm điều kiện để kiểm tra các phần tử trong interable là đúng hay sai, func chỉ có thể trả về True hoặc False.

interable: là các iterable cần lọc, có thể là set, list, tuple hoặc container.

Chạy chương trình, kết quả trả về là:

Output

['Ashley', 'Olly']

Ở đây, ta liệt kê một danh sách các chữ cái và cần lọc ra các nguyên âm trong đó.

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)0

Bạn có thể sử dụng vòng lặp for để kiểm tra từng thành phần trong danh sách và lưu trữ nó sang một danh sách khác, nhưng sử dụng Python thì quá trình này sẽ dễ dàng hơn và nhanh hơn bằng cách dùng phương thức filter().

Ở đây, ta có một danh sách ngẫu nhiên gồm cả số, chuỗi và boolean gọi là randomList. Chúng ta truyền randomList vào hàm filter() với tham số đầu tiên (func) là None. Lúc này, hàm tự mặc định trở thành Identity function, vậy nên ta nhận được các phần tử TRUE là 1, a, True và ‘0’ (‘0’ ở dạng chuỗi).

Output

['Ashley', 'Olly']

Thứ sáu, 24/07/2020 | 00:00 GMT+7

Sử dụng None có filter()

Ta có thể chuyển Các phn t được lc là: 1 a True 08 làm đối số đầu tiên cho Các nguyên âm được lc là: a e i o1 để trình vòng lặp được trả về lọc ra bất kỳ giá trị nào mà Python coi là "sai". Nói chung, Python coi bất kỳ thứ gì có độ dài bằng filter(function, iterable) 0 (chẳng hạn như danh sách trống hoặc chuỗi trống) hoặc số tương đương với filter(function, iterable) 0 là sai, do đó, việc sử dụng thuật ngữ “falsy”.

Trong trường hợp sau, ta muốn lọc danh sách của bạn để chỉ hiển thị số bể tại bể cá của ta :

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)2

Trong đoạn mã này, ta có một danh sách chứa các số nguyên , dãy trống và giá trị boolean .

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)3

Ta sử dụng các Các nguyên âm được lc là: a e i o1 chức năng với Các phn t được lc là: 1 a True 08 và vượt qua trong filter(function, iterable) 4 danh sách như iterable của ta . Vì ta đã chuyển Các phn t được lc là: 1 a True 08 làm đối số đầu tiên, ta sẽ kiểm tra xem các mục trong danh sách của ta có bị coi là sai hay không.

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)4

Sau đó, ta bọc filter(function, iterable) 6 trong một hàm Các nguyên âm được lc là: a e i o4 để nó trả về một danh sách cho các filter(function, iterable) 6 khi ta in.

Ở đây kết quả chỉ hiển thị các số nguyên. Tất cả các mục được đánh giá là # random list # viết bởi Quantrimang.com randomList = [1, 'a', 0, False, True, '0'] filteredList = filter(None, randomList) print('Các phần tử được lọc là:') for element in filteredList: print(element)0 , tương đương với độ dài bằng filter(function, iterable) 0 , đã bị loại bỏ bởi Các nguyên âm được lc là: a e i o1 :

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)5

Lưu ý : Nếu ta không sử dụng Các nguyên âm được lc là: a e i o4 và print filter(function, iterable) 6 ta sẽ nhận được một đối tượng filter giống như sau: filter(lambda item: item[] expression, iterable) 4 . Đối tượng bộ lọc là một đối tượng có thể lặp lại, vì vậy ta có thể lặp lại nó với Các nguyên âm được lc là: a e i o2 hoặc ta có thể sử dụng Các nguyên âm được lc là: a e i o4 để biến nó thành một danh sách, ta đang làm ở đây vì đó là một cách tốt để xem lại kết quả.

Với Các phn t được lc là: 1 a True 08 ta đã sử dụng Các nguyên âm được lc là: a e i o1 để nhanh chóng xóa các mục khỏi danh sách bị coi là sai.

Sử dụng filter() với Danh sách Từ điển

Khi ta có cấu trúc dữ liệu phức tạp hơn, ta vẫn có thể sử dụng Các nguyên âm được lc là: a e i o1 để đánh giá từng mục. Ví dụ: nếu ta có một danh sách các từ điển, ta không chỉ muốn lặp lại từng mục trong danh sách - một trong các từ điển - mà ta còn có thể cần lặp lại từng cặp khóa: giá trị trong từ điển để đánh giá tất cả dữ liệu.

Ví dụ: giả sử ta có danh sách từng sinh vật trong bể cá của bạn cùng với các chi tiết khác nhau về từng sinh vật trong số chúng:

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)6

Ta muốn lọc dữ liệu này bằng một chuỗi tìm kiếm mà ta cung cấp cho hàm. Để có Các nguyên âm được lc là: a e i o1 truy cập từng từ điển và từng mục trong từ điển, ta xây dựng một hàm lồng nhau, như sau:

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)7

Ta định nghĩa một creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 1 chức năng mà mất creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 2 và creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 3 như thông số. Trong creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 1 ta chuyển creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 5 làm hàm để Các nguyên âm được lc là: a e i o1 . Hàm creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 1 sẽ trả về trình lặp kết quả từ Các nguyên âm được lc là: a e i o1 .

creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 5 lấy # random list # viết bởi Quantrimang.com randomList = [1, 'a', 0, False, True, '0'] filteredList = filter(None, randomList) print('Các phần tử được lọc là:') for element in filteredList: print(element)6 làm đối số, đại diện cho một mục trong danh sách của ta (nghĩa là một từ điển duy nhất).

Tiếp theo Các nguyên âm được lc là: a e i o2 vòng lặp truy cập các giá trị trong mỗi phím: cặp giá trị trong từ điển của ta và sau đó sử dụng một tuyên bố có điều kiện để kiểm tra xem các creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 3 là trong print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names))) 3 , đại diện cho một giá trị.

Giống như trong các ví dụ trước của ta , nếu biểu thức đánh giá là print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names))) 4 , hàm sẽ thêm mục vào đối tượng bộ lọc. Kết quả sẽ trả về sau khi hàm creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 1 hoàn thành. Ta đặt vị trí print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names))) 6 bên ngoài vòng lặp của ta để nó kiểm tra mọi mục trong mỗi từ điển, thay vì quay lại sau khi kiểm tra từ điển đầu tiên.

Ta gọi creature_names = ['Sammy', 'Ashley', 'Jo', 'Olly', 'Jackie', 'Charlie'] 1 với danh sách các từ điển của ta và chuỗi tìm kiếm mà ta muốn tìm các kết quả phù hợp:

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)8

Một khi các chức năng hoàn thành ta có đối tượng bộ lọc của ta được lưu trữ trong print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names))) 8 biến, mà ta biến thành một danh sách và in:

# danh sách chữ cái alphabet = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # lọc nguyên âm # viết bởi Quantrimang.com def filterNguyenam(alphabet): nguyenam = ['a', 'e', 'i', 'o', 'u'] if(alphabet in nguyenam): return True else: return False filterNguyenam = filter(filterNguyenam, alphabet) print('Các nguyên âm được lọc là:') for nguyenam in filterNguyenam: print(nguyenam)9

Ta sẽ nhận được kết quả sau từ chương trình này:

Các nguyên âm được lc là: a e i o0

Ta đã lọc danh sách các từ điển với chuỗi tìm kiếm print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names))) 9 . Ta có thể thấy rằng ba từ điển bao gồm một số xe tăng với print(list(filter(lambda x: x[0].lower() in 'aeiou', creature_names))) 9 đã được trả lại. Sử dụng chức năng lồng nhau của riêng ta cho phép ta truy cập mọi mục và kiểm tra hiệu quả từng mục đối với chuỗi tìm kiếm.

Kết luận

Trong hướng dẫn này, ta đã học các cách khác nhau để sử dụng hàm Các nguyên âm được lc là: a e i o1 trong Python. Như vậy, bạn có thể sử dụng Các nguyên âm được lc là: a e i o1 với hàm của riêng mình, hàm Các nguyên âm được lc là: a e i o8 hoặc với Các phn t được lc là: 1 a True 08 để lọc các mục có độ phức tạp khác nhau của cấu trúc dữ liệu.

Mặc dù trong hướng dẫn này, ta đã in kết quả từ Các nguyên âm được lc là: a e i o1 ngay lập tức ở định dạng danh sách, nhưng có khả năng trong chương trình của ta , ta sẽ sử dụng đối tượng Các nguyên âm được lc là: a e i o1 trả về và thao tác thêm với dữ liệu.

Nếu bạn muốn tìm hiểu thêm về Python, hãy xem loạt bài Cách viết mã trong Python 3 và trang chủ đề Python của ta .

Tags:

Các tin liên quan

Cách sử dụng module pathlib để thao tác đường dẫn hệ thống tệp trong Python 3
2020-07-15
Cách tạo Slackbot bằng Python trên Ubuntu 20.04
2020-06-30
Cách sử dụng ThreadPoolExecutor trong Python 3
2020-06-23
Cách sử dụng module sqlite3 trong Python 3
2020-06-02
Cách thiết lập notebook Jupyter với Python 3 trên Ubuntu 20.04 và Kết nối qua Đường hầm SSH
2020-05-19
Cách cài đặt Phân phối Python Anaconda trên Ubuntu 20.04 [Khởi động nhanh]
2020-05-19
Cách cài đặt Phân phối Python Anaconda trên Ubuntu 20.04
2020-05-06
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên server Ubuntu 20.04
2020-04-24
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên server Ubuntu 18.04
2020-04-24
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên Ubuntu 20.04 [Quickstart]
2020-04-24

Chủ đề