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ố 8Lambda 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