Cách sử dụng hàm map() trong Python

Tìm hiểu cách sử dụng hàm map() của Python. Nắm vững cách áp dụng các hàm cho các vòng lặp mà không cần viết vòng lặp và so sánh bản đồ với khả năng hiểu danh sách.

Hãy thử Giải pháp này trong Trình chỉnh sửa

Tổng quan

Khi xử lý các bộ sưu tập dữ liệu, bạn thường sẽ cần áp dụng một phép chuyển đổi cụ thể cho từng mục trong một lần lặp. Ví dụ: chuyển đổi danh sách các số chuỗi thành số nguyên hoặc chuẩn hóa một mảng chuỗi cơ sở dữ liệu bằng cách chuyển đổi chúng thành chữ thường. Thay vì viết các vòng lặp `for` dài dòng, Python cung cấp một công cụ tích hợp có tên là `map()`.

Hàm `map(function, iterable)` chấp nhận một hàm chuyển đổi và một iterable làm đối số. Nó áp dụng hàm cho từng phần tử của iterable và trả về một đối tượng iterator (đối tượng `map`). Bởi vì nó được trả về dưới dạng một trình lặp, nên các phép tính được thực hiện một cách lười biếng: các phần tử chỉ được xử lý khi bạn lặp lại chúng, điều này giúp tiết kiệm bộ nhớ cho các tập dữ liệu lớn.

Để có được biểu diễn danh sách của đối tượng bản đồ ngay lập tức, bạn phải truyền kết quả bằng cách sử dụng hàm tạo `list()`: `list(map(func, data))`. Bạn có thể chuyển bất kỳ hàm tiêu chuẩn nào, hàm thư viện tiêu chuẩn (như `str` hoặc `len`) hoặc các hàm ẩn danh tùy chỉnh được khai báo bằng từ khóa `lambda` trực tiếp tới `map()` để thực thi nội tuyến.

Đầu ra mã & thực thi

Tập lệnh này minh họa việc sửa đổi các bộ sưu tập bằng cách sử dụng hàm map() với các phép biến đổi chuỗi, ánh xạ các mục trong danh sách thành số và sử dụng lệnh gọi lại lambda.

# 1. Map string conversion over a list of numbers
numbers = [1, 2, 3, 4]
string_numbers = list(map(str, numbers))
print("Mapped to strings:", string_numbers)

# 2. Square numbers using a lambda function inside map()
squared = list(map(lambda x: x**2, numbers))
print("Squared numbers:", squared)

# 3. Apply custom logic function to items
def normalize_name(name):
    return name.strip().capitalize()

names = ["  alice", "BOB  ", " charlie "]
clean_names = list(map(normalize_name, names))
print("Clean names list:", clean_names)
Đầu ra thiết bị đầu cuối
Mapped to strings: ['1', '2', '3', '4']
Squared numbers: [1, 4, 9, 16]
Clean names list: ['Alice', 'Bob', 'Charlie']

Triển khai từng bước

  • Xác định hàm chuyển đổi mà bạn muốn áp dụng cho mọi phần tử trong bộ sưu tập.
  • Gọi map(function_name, iterable) để tạo một trình lặp lười biếng của các phần tử được chuyển đổi.
  • Gói lệnh gọi map() bên trong list() nếu bạn cần truy cập ngay vào tất cả các phần tử dưới dạng danh sách tiêu chuẩn.
  • Kết hợp map() với các hàm lambda để chuyển đổi nội tuyến một lần, nhanh chóng.

Câu hỏi thường gặp

Map() có tốt hơn khả năng hiểu danh sách không?

Việc hiểu danh sách thường được cộng đồng coi là dễ đọc hơn và Pythonic hơn. Tuy nhiên, map() có thể nhanh hơn khi áp dụng hàm dựng sẵn hiện có (như map(str, list)) vì nó chạy các vòng lặp mã C được tối ưu hóa.

Map() có thể thực hiện nhiều lần lặp không?

Vâng! Nếu hàm chuyển đổi có nhiều đối số, bạn có thể chuyển nhiều lần lặp cho map(). Ví dụ: map(lambda x, y: x + y, list1, list2) sẽ thêm các phần tử theo cặp.

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.