Python reduce list to list

Sử dụng Reduce trong Python

Cách sử dụng hàm giảm trong Python

Python giảm danh sách thành danh sách
Python giảm danh sách thành danh sách

Ảnh của Kevin Ku trên Unsplash

Quảng cáo

Giới thiệu

Python là một ngôn ngữ lập trình hướng đối tượng (OOP). Tuy nhiên, nó cung cấp một số công cụ cung cấp một phong cách lập trình chức năng. Một số công cụ này bao gồm các hàm map (), filter () và Reduce (). Trong hướng dẫn này, chúng ta sẽ khám phá hàm Reduce () và làm sáng tỏ tính linh hoạt và hữu ích mà nó cung cấp.

Các hàm map () và filter () được trình bày chi tiết ở đây:

Sử dụng Bản đồ và Bộ lọc trong Python

Cách sử dụng các chức năng bản đồ và bộ lọc tích hợp trong python

Sử dụng vòng lặp For

Cách tốt nhất để giới thiệu hàm Reduce () là bắt đầu với một vấn đề và cố gắng giải quyết nó theo cách cũ, sử dụng vòng lặp for. Sau đó, chúng ta có thể thử tác vụ tương tự bằng cách sử dụng hàm giảm.

Hãy Say rằng chúng tôi có một danh sách các số và chúng tôi muốn trả lại sản phẩm của họ. Nói cách khác, chúng ta muốn nhân tất cả các số trong danh sách với nhau và trả về giá trị duy nhất đó. Chúng ta có thể thực hiện điều này bằng cách sử dụng vòng lặp for:

Chúng tôi có danh sách các con số của chúng tôi, num_list. Chúng tôi muốn nhân các số trong danh sách này với nhau và nhận được sản phẩm của chúng. Chúng tôi tạo ra biến sản phẩm và đặt nó bằng 1. Sau đó, chúng tôi lặp lại num_list sử dụng vòng lặp for và chúng tôi nhân từng số với kết quả của lần lặp trước. Sau khi lặp lại num_listcác sản phẩmhoặc bộ tích lũy, sẽ bằng 120, là tích của tất cả các số trong danh sách.

Giảm chức năng

Nó chỉ ra rằng chúng ta có thể hoàn thành nhiệm vụ trên bằng cách sử dụng hàm giảm thay vì vòng lặp for. Hàm giảm có thể nhận ba đối số, hai trong số đó là bắt buộc. Hai đối số bắt buộc là: một hàm (bản thân nó nhận hai đối số) và một đối số có thể lặp lại (chẳng hạn như một danh sách). Đối số thứ ba, là bộ khởi tạo, là tùy chọn và do đó chúng ta sẽ thảo luận về nó ở phần sau.

giảm (chức năng, có thể lặp lại[, initializer])

Nhập khẩu Giảm

Chức năng giảm có trong các chức năng mô-đun, có chứa các chức năng bậc cao hơn. Các chức năng bậc cao là các chức năng hoạt động trên hoặc trả về các chức năng khác. Do đó, để sử dụng hàm giảm, chúng ta cần nhập toàn bộ mô-đun functools hoặc chỉ có thể nhập hàm giảm từ functools:

nhập functoolstừ functools nhập giảm

Ghi chú: nếu chúng tôi nhập functools, chúng tôi sẽ cần truy cập vào hàm giảm như sau: functools.reduce (các đối số). Nếu chúng ta chỉ nhập hàm giảm từ mô-đun functools, chúng ta có thể truy cập hàm giảm chỉ bằng cách nhập giảm (đối số).

Khám phá chức năng Rút gọn

Như đã lưu ý trước đó, hàm giảm nhận trong hai đối số bắt buộc: một hàm và một có thể lặp. Để tránh nhầm lẫn giữa hàm giảm và hàm mà nó lấy làm đối số, tôi sẽ đề cập đến hàm giảm chỉ là hàm giảm.

Đối số đầu tiên mà hàm giảm nhận vào, bản thân nó phải nhận hai đối số. Sau đó, Reduce sẽ áp dụng tích lũy hàm này cho các phần tử của có thể lặp lại (từ trái sang phải) và giảm nó xuống một giá trị duy nhất.

Hãy xem một ví dụ:

Giả sử có thể lặp lại mà chúng tôi sử dụng là một danh sách, chẳng hạn như num_list từ ví dụ trên:

num_list = [1,2,3,4,5]

Và hàm chúng ta sử dụng làm đối số đầu tiên cho hàm Reduce như sau:

def prod (x, y):
trả về x * y

Hàm sản phẩm này có hai đối số: x và y. Sau đó, nó trả về sản phẩm của họ, hoặc x * y.

Cho phép vượt qua trong thần đồng chức năng và num_list như chức năng của chúng tôi và có thể lặp lại, tương ứng, để giảm:

từ functools nhập giảmproduct = Reduce (prod, num_list)

Đối tượng có thể lặp lại của chúng tôi là num_listđó là danh sách: [1,2,3,4,5]. Các chức năng của chúng tôi, thần đồng, nhận trong hai đối số, x và y. Giảm sẽ bắt đầu bằng cách lấy hai phần tử đầu tiên của num_list1 và 2, và chuyển chúng vào thần đồng hàm như các đối số x và y. Các thần đồng hàm trả về sản phẩm của họ, hoặc 1 * 2, bằng 2. Sau đó, Reduce sẽ sử dụng giá trị tích lũy của 2 làm giá trị x mới hoặc được cập nhật và sử dụng phần tử tiếp theo trong num_list, là 3, là giá trị y mới hoặc cập nhật của chúng tôi. Sau đó, nó gửi hai giá trị này (2 và 3) là x và y đến thần đồng hàm, sau đó trả về sản phẩm của họ, 2 * 3 hoặc 6. Sau đó, 6 này sẽ được sử dụng làm giá trị x mới hoặc cập nhật của chúng tôi và phần tử tiếp theo trong num_list sẽ được sử dụng làm giá trị y mới hoặc cập nhật của chúng tôi, là 4. Sau đó, nó sẽ gửi 6 và 4 dưới dạng giá trị x và y của chúng tôi tới thần đồng hàm, trả về 24. Do đó, giá trị x mới của chúng ta là 24 và giá trị y mới của chúng ta là phần tử tiếp theo từ num_listhoặc 5. Hai giá trị này được chuyển cho thần đồng hoạt động như các giá trị x và y của chúng tôi và thần đồng trả về sản phẩm của họ, 24 * 5, bằng 120. Do đó, giảm lấy một đối tượng có thể lặp lại, trong trường hợp này num_listvà giảm nó xuống một giá trị duy nhất, 120. Giá trị này sau đó được gán cho tích biến. Nói cách khác, đối số x được cập nhật với giá trị tích lũy và đối số y được cập nhật từ có thể lặp lại.

Lặp lại và Trình lặp lại trong Python

Lặp lại, trình lặp và lặp lại trong Python

Đối số thứ ba: Bộ khởi tạo

Hãy nhớ cách chúng tôi đã nói rằng giảm có thể nhận đối số thứ ba tùy chọn, trình khởi tạo? Giá trị mặc định cho nó là Không có. Nếu chúng ta chuyển vào một trình khởi tạo, nó sẽ được sử dụng làm giá trị x đầu tiên bằng cách giảm (thay vì x là phần tử đầu tiên của biến có thể lặp lại). Vì vậy, nếu chúng ta đã chuyển số 2 trong ví dụ trên làm trình khởi tạo:

product = Reduce (prod, num_list, 2)print (sản phẩm) # 240

Khi đó, hai giá trị hoặc đối số đầu tiên của x và y sẽ lần lượt là 2 và 1. Tất cả các bước tiếp theo sẽ giống nhau. Nói cách khác, trình khởi tạo được đặt trước các phần tử có thể lặp lại của chúng ta trong phép tính.

Sử dụng biểu thức Lambda

Thay vì chuyển vào prod dưới dạng hàm trong ví dụ trên, thay vào đó chúng ta có thể sử dụng biểu thức lambda (hoặc hàm ẩn danh) để rút ngắn đáng kể mã của chúng ta:

product = Reduce (lambda x, y: x * y, num_list)

Lưu ý cách biểu thức lambda nhận vào hai đối số: x và y, sau đó trả về tích của chúng, x * y.

Dưới đây là hướng dẫn đầy đủ về cách sử dụng biểu thức lambda:

Biểu thức Lambda bằng Python

Cách viết hàm ẩn danh trong python

Các ví dụ khác về việc sử dụng giảm

Có rất nhiều kịch bản khác về thời điểm chúng ta có thể sử dụng giảm.

Ví dụ, chúng ta có thể tìm tổng các số trong danh sách:

num_list = [1,2,3,4,5]sum = Reduce (lambda x, y: x + y, num_list)print (sum) # 15

Hoặc chúng ta có thể tìm số lượng tối đa trong danh sách:

num_list = [1,2,3,4,5]max_num = Reduce (lambda x, y: x if x> y else y, num_list)print (max_num) # 5

Hoặc số lượng tối thiểu trong danh sách:

num_list = [1,2,3,4,5]min_num = Reduce (lambda x, y: x if x print (min_num) # 1

Và rất nhiều ứng dụng khác!

Lưu ý: Python có các hàm tích hợp như max (), min () và sum () sẽ dễ sử dụng hơn cho ba ví dụ này. Tuy nhiên, mục tiêu là chỉ ra cách dùng Reduce () để hoàn thành nhiều tác vụ khác nhau.

Sự kết luận

Trong hướng dẫn này, chúng ta đã học cách nhập và sử dụng hàm giảm trong python. Sau đó, chúng tôi đã thấy cách các biểu thức lambda có thể được chuyển vào như một đối số để giảm bớt. Cuối cùng, chúng tôi đã thấy một số ví dụ về cách giảm có thể được sử dụng.

Bạn đang xem chuyên mục Hỏi đáp
Thuộc website web giải đáp

Quảng cáo
Hỏi đáp

Leave a Reply

Email của bạn sẽ không được hiển thị công khai.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>