Hàm Python map() thực thi hàm trên mỗi mục tập hợp, như danh sách hoặc tập hợp. Hàm map() nhận hàm và đối tượng áp dụng hàm hoạt động làm đối số.
Khi làm việc danh sách mục Python, bạn muốn thực hiện hàm cụ thể mỗi mục.
Đó là lúc hàm tích hợp Python map() xuất hiện. Hàm map Python thực thi hàm trên tất cả phần tử trong đối tượng lặp được (iterable), như danh sách, và trả về đối tượng map.
Hướng dẫn này, dùng loạt ví dụ, thảo luận cách dùng map() Python.
Đối Tượng Lặp Được Python (Iterable Objects)
Đối tượng lặp được là mục chứa số lượng giá trị đếm được và có thể duyệt. Danh sách, dictionary, bộ, tập hợp là iterable Python vì chứa nhiều giá trị và duyệt được.
Giả sử có danh sách tên học sinh lưu. Thay vì lưu tên nhiều biến Python, khai báo mảng lưu giá trị:
students = ["Lucy", "Bill", "Graham", "Tommy", "Leslie"]
Biến students chứa danh sách, là iterable object. Nghĩa là duyệt qua mục danh sách.
Cú Pháp Hàm Map Python
Hàm map() truyền mỗi phần tử danh sách thực thi hàm trên mỗi phần tử. map() tích hợp Python. Nghĩa là không nhập thư viện dùng map().
Python map() là higher-order function (hàm bậc cao) dùng áp dụng hàm cụ thể nhiều phần tử iterable object. Cú pháp map() Python:
map(function, iterable)
Đối số đầu map() là function. Hàm thực thi mọi mục iterable. iterable là đối tượng mapped, như danh sách, bộ, dictionary, tập hợp.
Cách Dùng Hàm Map Python
Giả sử bạn quản trị trường được giao tạo danh sách học sinh đầy đủ.
Quyết định in danh sách tên học sinh kèm lớp học bên cạnh tên. Ngăn nhầm lẫn nếu hai học sinh hai lớp khác trùng tên.
Ứng dụng hoàn hảo Python map(). Có iterable muốn thực thi hàm. Hàm nối tên học sinh với lớp. Chương trình nối tên học sinh cấp lớp:
def mergeNamesAndGrades(name):
return name + " First Grade"
students = ["Lucy", "Bill", "Graham", "Tommy", "Leslie"]
student_roster = map(mergeNamesAndGrades, students)
Hai dòng đầu, khai báo hàm Python mergeNamesAndGrades. Hàm nối tên học sinh với First Grade.
Dòng sau, định nghĩa danh sách học sinh trường. Có năm học sinh danh sách.
Hàm map() áp dụng biến student_roster Python. map() nhận hai đối số: hàm (mergeNamesAndGrades) và iterable object (students).
Phương thức map() áp dụng mergeNamesAndGrades() mỗi học sinh danh sách.
Chuyển Đổi Python Map Sang List
Tuy nhiên, chương trình chưa hoàn tất. map() trả mapped object, không danh sách hoàn chỉnh. In student_roster ngay, mã trả mapped object:
<map object at 0x7f2c74103890>
Đầu ra tạo vì map() trả đối tượng tùy chỉnh, không danh sách. Muốn in danh sách tên học sinh, chuyển student_roster thành list. Mã chuyển đổi:
print(list(student_roster))
Mã trả về danh sách Python:
['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade']
Xem ví dụ khác. Giả sử muốn chuyển tên và lớp học sinh thành chữ hoa danh sách. Dùng mã đổi chữ hoa tên và lớp:
def changeCase(name):
return name.upper()
student_roster = ['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade']
final_student_roster = map(changeCase, student_roster)
print(list(final_student_roster))
Mã trả về danh sách lặp được:
['LUCY FIRST GRADE', 'BILL FIRST GRADE', 'GRAHAM FIRST GRADE', 'TOMMY FIRST GRADE', 'LESLIE FIRST GRADE']
Ví dụ, định nghĩa hàm changeCase. Hàm đổi tên học sinh hoa. Dùng Python upper() chuyển chữ hoa mỗi tên.
Chương trình dùng map() gọi changeCase() mỗi đối tượng iterable student_roster. Cuối, chương trình trả danh sách tên học sinh sửa chữ hoa.
Hàm Map Python Với Lambda
Hàm Python map() dùng với lambda function làm mã hiệu quả hơn. Ví dụ trước, khai báo hàm mới thay đổi iterable cách cụ thể.
Nhưng chỉ muốn thực hiện hành động iterable object một lần, không cần khai báo hàm mới. Thay vào đó, dùng Python lambda function, hàm nhỏ vô danh.
Lambda function dùng với map() cho hàm nhỏ không muốn định nghĩa hàm mới.
Vì lambda function ngắn gọn hơn hàm thường, hãy dùng khi có thể. Dùng lambda cho hàm đơn giản giúp cải thiện dễ đọc mã.
Ví dụ lambda chuyển chữ hoa danh sách tên học sinh, như trên:
student_roster = ['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade'] final_student_roster = map(lambda s: s.upper(), student_roster) print(list(final_student_roster))
Chúng ta không khai báo hàm mới chuyển chữ hoa tên học sinh. Thay vào đó, dùng lambda s: s.upper(), hàm nhỏ vô danh chuyển chữ hoa tên.
Mã trả về:
['LUCY FIRST GRADE', 'BILL FIRST GRADE', 'GRAHAM FIRST GRADE', 'TOMMY FIRST GRADE', 'LESLIE FIRST GRADE']
Kết Luận
Hàm Python map() áp dụng hàm cụ thể tất cả phần tử iterable object. Ví dụ, dùng map() chuyển chữ hoa danh sách chuỗi. Hoặc, dùng map() nhân danh sách số số lượng cụ thể.
Hướng dẫn thảo luận cách dùng map() Python áp dụng hàm tất cả phần tử iterable object. Cũng thảo luận cách dùng lambda Python với map() tạo mã hiệu quả.
Bây giờ bạn trang bị kiến thức Python bắt đầu dùng map() như pro.