Map và Reduce trong Python là một tính năng rất hay và mạnh mẽ. Chúng ta có thể làm được rất nhiều việc với map và reduce. Bài này mình thử xem viết map và reduce trong python như thế nào?

1. Lamda function trong Python:

Python cho phép chúng ta tạo ra các anynomus function hay còn gọi là lamda function. Cú pháp khai báo lamda function như sau:

lamda <args> : <expr>

Hãy xem một ví dụ khi ta dùng function thông thường và lamda function

def f(x):
  return x**2
  
g = lamda x: x**2 

# call function 

print(f(2))  -> 4 

print(g(2)) -> 4 

Kết quả thực hiện đều như nhau. Nhưng trong nhiều trường hợp lamda function sẽ rất thuận tiện

Có một điểm chú ý ở đây là lamda function không có return.

2. Map function

Map là một function với 2 tham số đầu vào:

r= map(func,sep)

Map sử dụng một function f, array là input sau đó output array. Map sẽ apply hàm f này vào các phần tử trong mảng. Có thể hiểu map có ý tưởng giống for để duyệt qua các phần tử.

temp_c = [10, 3, -5, 25, 1, 9, 29, -10, 5]
temp_K = list(map(lamda x: x+ 273.5, tempc))
list(temp_K)

Để hiểu hơn về map, chúng ta thử giải quyết bài toán sau:

list_words = [“big”,”small”, “able”, “about”, “hairdresser”, “laboratory”]

Sử dụng map để đếm số ký tự của mỗi phần tử.

Trong python có hàm len() để lấy ra độ dài của phần tử. Vậy sử dụng map như sau:

print(list(map(len,list_words)))

3. Reduce function

Cũng như map function, reduce function là function có 2 tham số đầu vào là function f và sequen. Thay vì duyệt qua từng phần tử thì reduce sẽ combine mỗi 2 phần tử của arry bằng function f đầu vào. Chúng ta hãy xem sét ví dụ tính tổng dưới đây.

# define list 
numbers = [1,4,6,2,9,10]

def sum(x,y)
    return x+y
    
from functools import reduce 
print(reduce(sum,numbers)

Kết quả sẽ là: ((((1+4)+6)+2)+9)+10 = 32

Rất là hay đúng không, để hiểu hơn về reduce thì chúng ta solve ví dụ sau: Hãy tìm số lớn nhất bằng cách sử dụng reduce

# initializing list 
lis = [ 1 , 3, 5, 6, 2, ] 

# using reduce to compute maximum element from list 
print ("The maximum element of the list is : ",end="") 
print (functools.reduce(lambda a,b : a if a > b else b,lis))

Trong nhiều trường hợp thì map va reduce là cách xử lý hết sức hiệu quả và ngắn ngọn. Chúng ta có thể làm được rất nhiều thứ từ map và reduce nữa.Các bạn xem ví dụ sau nhé https://nyu-cds.github.io/python-bigdata/02-mapreduce/