Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 21: map, filter trong Python

Một trong những bộ ba function cực chất mà hầu như ngôn ngữ nào cũng phải có giúp cho việc xử lý mảng trở lên nhanh gọn hơn rất nhiều. đó chính là bộ 3 map, filter. Mà những thứ cực hay như thế thì chắc chắn một ngôn ngữ như python phải có rồi! :D

1, map().

Hàm map này có tác dụng duyệt qua tất cả các phần tử của một hoặc nhiều list, dictionary hoặc tương tự như thế, sử dụng đơn giản với cú pháp như sau:

map(function, iterable1, iterable2 ,...)

Trong đó:

  • function là hàm xử lý logic qua mỗi lần lặp giá trị trong interable1, ......
  • interable1, interable2 là các list, dict ,... các bạn cần lặp.

Hàm map sẽ trả về một map object chứa các kết quả sau khi thực thi.

VD: nhân đôi giá trị của tất cả các phần tử trong list.

def mutiply(x):
    return x * x


result = map(mutiply, [1, 2, 3, 4])

print(list(result)) # [1, 4, 9, 16]

function kia bạn có thể khai báo dưới dạng lambla cho gọn như sau:

result = map(lambda x: x * x, [1, 2, 3, 4])

print(list(result))  # [1, 4, 9, 16]

VD: map đối với 2 list truyền vào.

result = map(lambda x, y: x + " " + y, ['red', 'blue'], ['green', 'black'])

print(list(result))  # ['red green', 'blue black']

2, filter().

Hàm này cũng có tác dụng duyệt qua các phần tử trong list, dict,... nhưng khác với map là hàm này sẽ chỉ trả về những giá trị mà điều kiện trong function chấp nhận (có nghĩa là True).

Cú pháp:

filter(function, iterable)

Trong đó:

  • function là hàm xử lý logic qua mỗi lần lặp giá trị trong interable, ......
  • interable là các list, dict ,... các bạn cần lặp.

Hàm filter sẽ trả về một map object chứa các kết quả sau khi thực thi.

VD: filter các giá trị không chia hết cho 2.

result = filter(lambda x: x % 2, [1, 2, 3, 4, 5, 6, 7, 8, 9, 22])

print(list(result))  # [1, 3, 5, 7, 9]

3, Lời kết.

Bằng việc sử dụng lambda trong mapfilter thì sẽ giúp cho code của chúng ta tường minh hơn, đồng thời sẽ tiết kiệm được một số tài nguyên khi chương trình runtime (không đáng kể).

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

14 Comments

Bộ ba? Tác giả quên viết Reduce rồi.

Samori

5 năm trước

Chào bạn,
Do mình nhầm đó.
Reduce không còn được hỗ trợ trong python3 nữa rồi bạn ạ!

Vũ Thanh Tài

5 năm trước

Mình có thắc mắc là chỉ cần sử dụng list comprehention là có thể bao quát được cả map và filter rồi .Vậy độ phổ biến của cách này thế nào ạ ?

5 năm trước

Chào bạn. Trong phần mềm kết cấu etabs dc viết bởi vba . Vậy có cách nào viết addin bằng python ko vậy?. Xin cảm ơn

Lam

4 năm trước

Cam on ban.

Phương Vy

4 năm trước

cái phần hàm filter tại sao lại trả về các giá trị ko chia hết cho 2 mà ko phải là ngược lại ạ?

uyen

4 năm trước

đơn giản là True = 1, False = 0, x%2 là chia lấy số dư, ví dụ như 3%2 dư 1, thì 1 được xem là True.

Thành

3 năm trước

Cám ơn tác giả, đọc dễ hiểu.

Nguyễn Khánh Toàn

3 năm trước

nice

quý đẹp trau

3 năm trước

/minh muon chuyen mang 1 chieu sang mang 2 chieu trong python3 lam the nao?

loanntt

2 năm trước

không làm thêm nữa hả ad

mem mới

1 năm trước

EM thấy bác này hay bổ ích

idk123

1 năm trước

chào bạn tôi muốn hỏi

h

11 tháng trước

Cảm ơn anh. Bài rất hữu ích ạ

Thành Vinh

11 tháng trước

Bình luận

Captcha