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. 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àyLà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ênTrong 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ừ TupleBâ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ậnTrong 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ợpHã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): 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ớiHã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ổngNhư 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 |