Bộ lọc Python (danh sách lambda của bộ dữ liệu)

Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực thi chương trình nói trên


Trình chỉnh sửa mã Python

Có một cách khác để giải quyết giải pháp này?

Trước. Viết chương trình Python để tạo một hàm nhận một đối số và đối số đó sẽ được nhân với một số chưa biết.
Tiếp theo. Viết chương trình Python để sắp xếp danh sách từ điển bằng Lambda.

Mức độ khó của bài tập này là gì?

Dễ dàng trung bình khó

Kiểm tra kỹ năng Lập trình của bạn với bài kiểm tra của w3resource



con trăn. Lời khuyên trong ngày

Làm cho nó bất biến

Hàm freezeset[] cho phép danh sách không thay đổi

Trong một số trường hợp, bạn có thể đã bắt đầu chương trình của mình với một danh sách thay vì các bộ vì kết luận rằng cấu trúc dữ liệu có thể thay đổi phù hợp hơn cho dự án. Nhưng mọi thứ thay đổi, các dự án phát triển và ý tưởng được biết là thay đổi lộ trình. Bây giờ bạn quyết định rằng bạn cần cấu trúc bất biến nhưng dường như đã quá muộn để thực hiện công việc chuyển đổi danh sách tẻ nhạt của bạn? . Frozenset[] sẽ làm cho nó trở nên dễ dàng

Để lọc các mục của Tuple trong Python, hãy gọi hàm dựng sẵn filter[] và chuyển hàm lọc và tuple làm đối số. Hàm lọc sẽ lấy một đối số và trả về True nếu mục phải có trong kết quả hoặc Sai nếu mục phải không có trong kết quả

hàm filter[] trả về một đối tượng bộ lọc, chúng ta có thể chuyển đổi nó thành bộ tuple bằng cách sử dụng tuple[]

Hàm dựng sẵn filter[] của Python

ví dụ

Lọc số chẵn từ bộ số nguyên

Trong chương trình sau, chúng tôi lấy một bộ dữ liệu

[2, 8, 14, 16]
5 với các số nguyên và chỉ lọc các số chẵn bằng chức năng bộ lọc

Chương trình Python

aTuple = [2, 5, 8, 1, 14, 3, 16]
result = filter[lambda x: x % 2 == 0, aTuple]
result = tuple[result]
print[result]
Thử trực tuyến

đầu ra

[2, 8, 14, 16]

Chỉ lọc các số nguyên từ Tuple

Bây giờ, chúng ta hãy lấy một bộ với các mục có kiểu dữ liệu khác nhau. Sử dụng hàm filter[], chúng tôi chỉ lọc các số nguyên

Chương trình Python

aTuple = [2, 5, 'Abc', 14, 'Mno', True]
result = filter[lambda x: type[x] == int, aTuple]
result = tuple[result]
print[result]
Dùng thử trực tuyến

đầu ra

[2, 5, 14]

Phần kết luận

Trong Hướng dẫn Python này, chúng ta đã học cách lọc các mục của Tuple trong Python bằng hàm filter[], với các ví dụ

Phần trước đã giới thiệu một số tính năng kiểu chức năng — hiểu danh sách, lọc và ánh xạ. Ở đây chúng tôi trình bày các chức năng bản đồ và bộ lọc tích hợp để lọc và ánh xạ tương ứng. Chúng tôi tiếp tục thảo luận về các phép giảm trong đó bạn xử lý một tập hợp các phần tử thành một giá trị duy nhất, chẳng hạn như số lượng, tổng, sản phẩm, trung bình, tối thiểu hoặc tối đa của chúng

Lọc các giá trị của chuỗi bằng Chức năng bộ lọc tích hợp

Hãy sử dụng bộ lọc chức năng tích hợp để lấy các giá trị lẻ bằng số

In [1]: numbers = [10, 3, 7, 1, 9, 4, 2, 8, 5, 6]

In [2]: def is_odd[x]:
   ...:     """Returns   True only if x is odd."""
   ...:     return x % 2 != 0
   ...:

In [3]: list[filter[is_odd, numbers]]
Out[3]: [3, 7, 1, 9, 5]

Giống như dữ liệu, hàm Python là đối tượng mà bạn có thể gán cho biến, chuyển sang hàm khác và trả về từ hàm. Các hàm nhận các hàm khác làm đối số là một khả năng kiểu hàm được gọi là các hàm bậc cao hơn. Ví dụ: đối số đầu tiên của bộ lọc phải là một hàm nhận một đối số và trả về True nếu giá trị phải được đưa vào kết quả. Hàm is_odd trả về True nếu đối số của nó là số lẻ. Hàm bộ lọc gọi is_odd một lần cho mỗi giá trị trong đối số thứ hai có thể lặp lại [số]. Kết quả là các hàm bậc cao hơn cũng có thể trả về một hàm

Bộ lọc chức năng trả về một trình vòng lặp, vì vậy kết quả của bộ lọc không được tạo ra cho đến khi bạn lặp qua chúng. Đây là một ví dụ khác về đánh giá lười biếng. Trong đoạn mã [3], hàm list lặp qua các kết quả và tạo một danh sách chứa chúng. Chúng ta có thể thu được kết quả tương tự như trên bằng cách sử dụng cách hiểu danh sách với mệnh đề if

In [4]: [item for item in numbers if is_odd[item]]
Out[4]: [3, 7, 1, 9, 5]

Sử dụng lambda thay vì hàm

Đối với các hàm đơn giản như is_odd chỉ trả về giá trị của một biểu thức duy nhất, bạn có thể sử dụng biểu thức lambda [hoặc đơn giản là lambda] để xác định hàm nội tuyến ở nơi cần thiết—thường là khi nó được chuyển sang một hàm khác

In [5]: list[filter[lambda x: x   % 2 != 0, numbers]]
Out[5]: [3, 7, 1, 9, 5]

Chúng tôi chuyển giá trị trả về của bộ lọc [một trình vòng lặp] cho hàm list tại đây để chuyển đổi kết quả thành danh sách và hiển thị chúng

Biểu thức lambda là một hàm ẩn danh—nghĩa là một hàm không có tên. Trong cuộc gọi bộ lọc

            filter[lambda x: x % 2 != 0, numbers]

đối số đầu tiên là lambda

________số 8

Lambda bắt đầu bằng từ khóa lambda, theo sau là danh sách tham số được phân tách bằng dấu phẩy, dấu hai chấm [. ] và một biểu thức. Trong trường hợp này, danh sách tham số có một tham số tên là x. Một lambda hoàn toàn trả về giá trị của biểu thức của nó. Vì vậy, bất kỳ chức năng đơn giản của hình thức

           def function_name[parameter_list]:
return expression

có thể được thể hiện dưới dạng lambda ngắn gọn hơn có dạng

[2, 8, 14, 16]
0

Ánh xạ các giá trị của chuỗi thành các giá trị mới

Hãy sử dụng bản đồ chức năng tích hợp với lambda để bình phương từng giá trị theo số

[2, 8, 14, 16]
1

Đối số đầu tiên của hàm map là một hàm nhận một giá trị và trả về một giá trị mới—trong trường hợp này là một lambda bình phương đối số của nó. Đối số thứ hai là một giá trị có thể lặp lại để ánh xạ. Bản đồ chức năng sử dụng đánh giá lười biếng. Vì vậy, chúng tôi chuyển đến hàm danh sách trình vòng lặp mà bản đồ trả về. Điều này cho phép chúng tôi lặp lại và tạo danh sách các giá trị được ánh xạ. Đây là một cách hiểu danh sách tương đương

[2, 8, 14, 16]
2

Kết hợp bộ lọc và bản đồ

Bạn có thể kết hợp các hoạt động của bộ lọc trước và bản đồ như sau

[2, 8, 14, 16]
3

Có rất nhiều điều đang diễn ra trong đoạn trích [9], vì vậy hãy xem xét kỹ hơn về nó. Đầu tiên, bộ lọc trả về một lần lặp chỉ đại diện cho các giá trị lẻ của các số. Sau đó, bản đồ trả về một lần lặp đại diện cho các hình vuông của các giá trị được lọc. Cuối cùng, danh sách sử dụng khả năng lặp lại của bản đồ để tạo danh sách. Bạn có thể thích cách hiểu danh sách sau hơn đoạn trích trước

In [4]: [item for item in numbers if is_odd[item]]
Out[4]: [3, 7, 1, 9, 5]
0

Với mỗi giá trị của x bằng số, biểu thức x ** 2 chỉ được thực hiện nếu thỏa mãn điều kiện x % 2. = 0 là Đúng

Sự giảm bớt. Tính tổng các phần tử của dãy với tổng

Như bạn đã biết, quá trình rút gọn xử lý các phần tử của chuỗi thành một giá trị duy nhất. Bạn đã thực hiện rút gọn với các hàm tích hợp sẵn len, sum, min và max. Bạn cũng có thể tạo các mức giảm tùy chỉnh bằng cách sử dụng chức năng giảm của mô-đun funcools. Xem https. // tài liệu. con trăn. org/3/library/funcools. html cho một ví dụ về mã. Khi chúng tôi điều tra dữ liệu lớn và Hadoop trong Chương 16, chúng tôi sẽ trình bày lập trình MapReduce, dựa trên các hoạt động lọc, ánh xạ và rút gọn trong lập trình kiểu chức năng

Chủ Đề