Sunday, January 19, 2025

[Python] Lesson 55 – Reduce

-

reduce là một hàm được xây dựng trong module functools của Python. Hàm reduce cho phép tính toán một giá trị duy nhất bằng cách sử dụng một hàm cho từng cặp phần tử trong một sequence (list, tuple, set,…) và kết hợp kết quả của các phép tính này với nhau. Kết quả cuối cùng là giá trị tính toán cuối cùng.

Cú pháp của hàm reduce như sau:

reduce(function, sequence[, initial])

Trong đó:

  • function: là hàm thực hiện phép tính. Hàm này nhận vào hai đối số là phần tử thứ nhất và phần tử thứ hai của sequence, thực hiện phép tính giữa hai phần tử đó, sau đó trả về kết quả. Hàm này phải trả về một giá trị.
  • sequence: là sequence (list, tuple, set, …) cần tính toán.
  • initial (tùy chọn): là giá trị ban đầu được sử dụng trong phép tính reduce. Nếu không có giá trị khởi tạo được cung cấp, reduce sẽ sử dụng phần tử đầu tiên của sequence làm giá trị khởi tạo.

Ví dụ 1:

from functools import reduce

# Tính tổng các phần tử trong một list
numbers = [1, 2, 3, 4, 5]
sum = reduce(lambda x, y: x + y, numbers)
print(sum)  # output: 15

# Tính tích các phần tử trong một list
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # output: 120

# Tìm phần tử lớn nhất trong một list
numbers = [1, 7, 3, 4, 5]
max_number = reduce(lambda x, y: x if x > y else y, numbers)
print(max_number)  # output: 7

Trong ví dụ trên, ta sử dụng hàm reduce để tính tổng và tích các phần tử trong một list. Trong ví dụ thứ ba, ta sử dụng hàm reduce để tìm phần tử lớn nhất trong một list.

Ví dụ 2:

from functools import reduce

numbers = [1, 2, 3, 4, 5]
total = reduce(lambda x, y: x + y, numbers)

print(total)  # output: 15

Trong ví dụ này, chúng ta sử dụng reduce để áp dụng một hàm lambda cho các phần tử của danh sách numbers. Hàm lambda này có hai đối số xy, và nó thực hiện phép cộng giữa chúng. Kết quả của phép tính này được chuyển tiếp làm đối số đầu tiên cho hàm lambda tiếp theo, và quá trình này được lặp lại cho đến khi không còn phần tử nào trong danh sách. Kết quả cuối cùng được trả về là tổng của các số trong danh sách.

Lưu ý rằng trong ví dụ này chúng ta cần import module functools để sử dụng hàm reduce.

Ví dụ 3:

Trong quản trị hệ thống Linux, reduce có thể được sử dụng để tính toán tổng dung lượng của tất cả các tập tin trong một thư mục. Ví dụ:

import os
from functools import reduce

# Hàm tính toán tổng dung lượng
def get_total_size(acc, file):
    return acc + os.path.getsize(file)

# Đường dẫn đến thư mục cần tính tổng dung lượng
folder_path = '/var/log'

# Lấy danh sách tất cả các tập tin trong thư mục
files = os.listdir(folder_path)

# Sử dụng reduce để tính tổng dung lượng của tất cả các tập tin
total_size = reduce(get_total_size, [os.path.join(folder_path, f) for f in files], 0)

# In ra tổng dung lượng
print(f'Total size of files in {folder_path} is {total_size} bytes')

Trong ví dụ này, reduce được sử dụng để tính tổng dung lượng của tất cả các tập tin trong thư mục /var/log. Hàm get_total_size được truyền vào như một tham số đầu tiên cho reduce, và nó được áp dụng lần lượt cho từng tập tin trong thư mục, bắt đầu từ giá trị khởi tạo là 0. Hàm get_total_size nhận vào hai tham số: giá trị tích lũy (acc) và tên tập tin hiện tại (file), và trả về tổng dung lượng tích lũy cộng thêm dung lượng của tập tin hiện tại. Cuối cùng, tổng dung lượng của tất cả các tập tin được in ra màn hình.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories