Python Hàm map() với các ví dụ

⚡ Tóm tắt thông minh

Python Hàm `map()` áp dụng một hàm nhất định cho mọi phần tử của một đối tượng có thể lặp lại như danh sách, bộ dữ liệu, tập hợp, từ điển hoặc chuỗi. Nó trả về một đối tượng `map` lười biếng mà bạn có thể chuyển đổi bằng hàm `list()` hoặc lặp lại bằng vòng lặp.

  • 🔢 Cú pháp: Hàm map() nhận một hàm cộng với một hoặc nhiều phần tử có thể lặp lại và áp dụng hàm đó cho từng phần tử.
  • 🔁 Giá trị trả lại: Phương thức map() trả về một đối tượng map lười biếng, vì vậy hãy bọc nó trong list(), tuple() hoặc set() để xem kết quả.
  • 🧩 Các đối tượng có thể lặp lại: Danh sách, bộ dữ liệu, tập hợp, từ điển và chuỗi đều có thể được sử dụng làm đầu vào cho hàm map().
  • Lamda: Việc kết hợp map() với lambda giúp tránh việc định nghĩa một hàm riêng biệt có tên cho các phép biến đổi đơn giản.
  • Nhiều đối tượng có thể lặp lại: Việc truyền nhiều đối tượng có thể lặp sẽ áp dụng hàm đó song song trên chúng, dừng lại.ping Ngắn nhất là như vậy.
  • 🤖 Hỗ trợ AI: Các trợ lý AI như GitHub Copilot tạo ra các lệnh map(), và các phép biến đổi kiểu map cung cấp dữ liệu cho các đường dẫn dữ liệu trong học máy.

Python bản đồ() Hàm

cú pháp

map(function, iterator1,iterator2 ...iteratorN)

Thông số Kỹ thuật

Dưới đây là hai thông số quan trọng:

  • chức năng: Một hàm bắt buộc phải được cung cấp cho hàm map(), hàm này sẽ được áp dụng cho tất cả các phần tử có sẵn trong trình lặp.
  • vòng lặp: Một đối tượng lặp bắt buộc. Nó có thể là một danh sách, một bộ dữ liệu, v.v. Bạn có thể truyền nhiều đối tượng lặp cho hàm map().

Trở lại giá trị

Hàm map() áp dụng hàm đã cho lên tất cả các phần tử bên trong iterator và trả về một đối tượng map có thể lặp lại, tức là một tuple, một list, v.v.

Hàm map() hoạt động như thế nào?

Hàm map() nhận hai tham số đầu vào: một hàm và một đối tượng có thể lặp lại. Hàm được truyền cho map() là một hàm thông thường, và nó sẽ lặp lại tất cả các giá trị có trong đối tượng có thể lặp lại đó.

Ví dụ: giả sử bạn có một danh sách các số và bạn muốn tìm bình phương của mỗi số đó.

Để có được kết quả, chúng ta cần một hàm trả về bình phương của số đã cho. Hàm đó như sau:

def square(n):
	return n*n

Danh sách các mục mà chúng ta muốn tìm bình phương của chúng như sau:

my_list = [2,3,4,5,6,7,8,9]

Bây giờ chúng ta hãy sử dụng hàm tích hợp map() để lấy bình phương của từng phần tử trong my_list.

Mã cuối cùng như sau:

def square(n):
    return n*n
my_list = [2,3,4,5,6,7,8,9]
updated_list = map(square, my_list)
print(updated_list)
print(list(updated_list))

Đầu ra:

<map object at 0x0000002C59601748>
[4, 9, 16, 25, 36, 49, 64, 81]

Như đã thấy ở trên, kết quả đầu ra của hàm map() là một đối tượng bản đồ được hiển thị trên màn hình. .

Bạn sẽ phải lặp lại kết quả từ hàm map() bằng vòng lặp for hoặc phương thức list() để có được kết quả cuối cùng. Tôi đã sử dụng list() trong mã để hiển thị các giá trị bên trong danh sách đã cho.

Vì vậy, bằng cách sử dụng hàm map(), chúng ta có thể tính bình phương của mỗi số. Danh sách được cung cấp cho map() là [2,3,4,5,6,7,8,9], và sử dụng hàm square(), kết quả chúng ta nhận được là [4, 9, 16, 25, 36, 49, 64, 81].

Hàm map() áp dụng hàm square() cho tất cả các phần tử trong danh sách. Ví dụ, nó nhận biến my_list và cập nhật danh sách với bình phương của mỗi số. Kết quả được lưu trữ trong biến updated_list.

Sử dụng bản đồ() với Python Chức năng tích hợp sẵn

Python Hàm map() là một hàm có sẵn và cũng có thể được sử dụng cùng với các hàm có sẵn khác trong PythonTrong ví dụ này, chúng ta sẽ sử dụng... Python Hàm tích hợp round() dùng để làm tròn các giá trị đã cho.

Ví dụ:

Tôi có một danh sách là my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]. Tôi cần làm tròn giá trị của từng mục trong danh sách, vì vậy chúng ta sẽ sử dụng hàm round() để ánh xạ tới (map()).

my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]
updated_list = map(round, my_list)
print(updated_list)
print(list(updated_list))

Đầu ra:

<map object at 0x000000E65F901748>
[3, 4, 4, 6, 6, 8, 8, 10]

Hàm round() được áp dụng cho tất cả các phần tử trong danh sách và trả về một danh sách với tất cả các giá trị đã được làm tròn, như hiển thị trong kết quả đầu ra.

Sử dụng map() với một chuỗi làm trình vòng lặp

Chúng ta cũng có thể sử dụng map() trên một chuỗi. TRONG PythonChuỗi ký tự hoạt động giống như một mảng, vì vậy chúng ta có thể dễ dàng sử dụng nó bên trong hàm map().

Trong ví dụ này, chúng ta có một hàm `myMapFunc()` đảm nhiệm việc chuyển đổi chuỗi đã cho thành chữ hoa. Hàm `myMapFunc()` được truyền cho hàm `map()`. Hàm `map()` sẽ thực hiện việc chuyển đổi chuỗi đã cho thành chữ hoa bằng cách truyền chuỗi đó cho `myMapFunc()`.

def myMapFunc(s):
    return s.upper()
my_str = "welcome to guru99 tutorials!"
updated_list = map(myMapFunc, my_str)
print(updated_list)
for i in updated_list:
    print(i, end="")

Đầu ra:

<map object at 0x000000DF2E711748>
WELCOME TO GURU99 TUTORIALS!

Sử dụng map() với một danh sách Numbers

Để làm việc với danh sách trong map(), chúng ta sẽ lấy một danh sách các số và nhân mỗi số trong danh sách đó với 10.

Danh sách mà chúng ta sẽ sử dụng là [2,3,4,5,6,7,8,9]. Hàm myMapFunc() đảm nhiệm việc nhân số đã cho với 10. Hàm này được truyền cho hàm map() cùng với danh sách.

Ví dụ:

def myMapFunc(n):
    return n*10

my_list = [2,3,4,5,6,7,8,9]

updated_list = map(myMapFunc, my_list)
print(updated_list)
print(list(updated_list))

Đầu ra:

<map object at 0x000000EE2C061898>
[20, 30, 40, 50, 60, 70, 80, 90]

Kết quả chúng ta thấy là mỗi số trong danh sách đều được nhân với 10.

Sử dụng bản đồ() với Tuple

Một tuple là một đối tượng trong Python Đó là một bộ dữ liệu gồm các phần tử được phân tách bằng dấu phẩy và nằm trong dấu ngoặc tròn. Trong ví dụ này, chúng ta sẽ lấy một bộ dữ liệu với các giá trị chuỗi. Hàm mà chúng ta sẽ sử dụng sẽ chuyển đổi các giá trị đã cho thành chữ hoa.

Ví dụ:

def myMapFunc(n):
    return n.upper()

my_tuple = ('php','java','python','c++','c')

updated_list = map(myMapFunc, my_tuple)
print(updated_list)
print(list(updated_list))

Đầu ra:

<map object at 0x0000009C3C3A16A0>
['PHP', 'JAVA', 'PYTHON', 'C++', 'C']

Kết quả nhận được là một bộ giá trị (tuple) với tất cả các giá trị bên trong đã được chuyển đổi thành chữ hoa.

Sử dụng bản đồ() với Từ điển

A từ điển trong Python được tạo bằng dấu ngoặc nhọn ({}). Vì từ điển là một trình lặp, bạn có thể sử dụng nó bên trong hàm map(). Bây giờ chúng ta hãy sử dụng một từ điển như một trình lặp bên trong hàm map().

Ví dụ sau đây minh họa cách hoạt động của một trình lặp từ điển bên trong hàm map():

def myMapFunc(n):
    return n*10
my_dict = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_dict)
print(finalitems)
print(list(finalitems))

Đầu ra:

<map object at 0x0000007EB451DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

Sử dụng bản đồ() với Set

Một bộ trong Python là một tập hợp các mục không có thứ tự nằm trong dấu ngoặc nhọn ({}). Vì set() cũng là một trình lặp, bạn có thể sử dụng nó bên trong hàm map().

Dưới đây là một ví dụ thực tế về việc sử dụng một tập hợp làm trình lặp bên trong hàm map():

def myMapFunc(n):
    return n*10
my_set = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_set)
print(finalitems)
print(list(finalitems))

Đầu ra:

<map object at 0x000000AC8F05DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

Sử dụng bản đồ() với hàm Lambda

In Python, biểu thức lambda được sử dụng để xây dựng các hàm ẩn danh. Bạn sẽ phải sử dụng từ khóa lambda giống như bạn sử dụng def để xác định các hàm thông thường.

Trong ví dụ này, chúng ta sẽ sử dụng hàm lambda bên trong hàm map(). Hàm lambda sẽ nhân mỗi giá trị trong danh sách với 10.

Ví dụ:

my_list = [2,3,4,5,6,7,8,9]
updated_list = map(lambda x: x * 10, my_list)
print(updated_list)
print(list(updated_list))

Đầu ra:

<map object at 0x000000BD18B11898>
[20, 30, 40, 50, 60, 70, 80, 90]

Sử dụng nhiều trình lặp bên trong hàm map()

Ví dụ 1: Truyền hai iterator danh sách cho hàm map()

Bạn có thể gửi nhiều hơn một iterator, ví dụ như một danh sách, một tuple, v.v., cùng một lúc đến hàm map().

Ví dụ, nếu bạn muốn cộng hai danh sách, bạn có thể thực hiện điều tương tự bằng cách sử dụng hàm map(). Chúng ta sẽ sử dụng hai danh sách, my_list1 và my_list2.

Trong ví dụ bên dưới, phần tử đầu tiên trong my_list1 được cộng với phần tử đầu tiên của my_list2. Hàm myMapFunc() nhận vào các phần tử của my_list1 và my_list2 và trả về tổng của cả hai.

Dưới đây là ví dụ thực tế về việc cộng hai danh sách cho trước bằng cách sử dụng hàm map().

def myMapFunc(list1, list2):
    return list1+list2

my_list1 = [2,3,4,5,6,7,8,9]
my_list2 = [4,8,12,16,20,24,28]

updated_list = map(myMapFunc, my_list1,my_list2)
print(updated_list)
print(list(updated_list))

Đầu ra:

<map object at 0x0000004D5F751860>
[6, 11, 16, 21, 26, 31, 36]

Ví dụ 2: Truyền một Tuple và một iterator danh sách cho hàm map()

Chúng ta sẽ sử dụng một danh sách và một bộ lặp trong hàm map(). Hàm được truyền cho map(), myMapFunc(), sẽ lấy các phần tử từ danh sách và bộ lặp. Các phần tử sẽ được nối với nhau bằng dấu gạch dưới (_). Ví dụ hoạt động được hiển thị bên dưới:

def myMapFunc(list1, tuple1):
    return list1+"_"+tuple1

my_list = ['a','b', 'b', 'd', 'e']
my_tuple = ('PHP','Java','Python','C++','C')

updated_list = map(myMapFunc, my_list,my_tuple)
print(updated_list)
print(list(updated_list))

Đầu ra:

<map object at 0x00000059F37BB4E0>
['a_PHP', 'b_Java', 'b_Python', 'd_C++', 'e_C']

Câu Hỏi Thường Gặp

Cả hai đều áp dụng một thao tác cho từng phần tử. List comprehension thường dễ đọc hơn và trả về trực tiếp một danh sách, trong khi map() trả về một đối tượng map lười biếng và có thể nhanh hơn khi sử dụng lại một hàm có tên đã tồn tại.

Không. Hàm map() không bao giờ thay đổi đối tượng lặp ban đầu. Nó đọc từng phần tử, áp dụng hàm của bạn và tạo ra một đối tượng map mới theo kiểu lười biếng, giữ nguyên danh sách, bộ dữ liệu hoặc chuỗi nguồn.

In Python 3. Phương thức `map()` hoạt động theo kiểu lười biếng: nó trả về một đối tượng bản đồ chỉ tính toán giá trị khi được lặp lại. Điều này giúp tiết kiệm bộ nhớ đối với dữ liệu lớn. Hãy bọc nó trong phương thức `list()` hoặc lặp qua nó để nhận kết quả.

Hàm map() biến đổi mọi phần tử, hàm filter() chỉ giữ lại những phần tử vượt qua bài kiểm tra, và hàm reduce() (từ functools) kết hợp tất cả các phần tử thành một giá trị duy nhất. Cả hai hàm này cùng nhau thực hiện các thao tác biến đổi, chọn lọc và tổng hợp.

Khi các iterable có độ dài khác nhau, map() sẽ dừng lại ở iterable ngắn nhất. Các phần tử thừa trong iterable dài hơn sẽ bị bỏ qua, do đó không có lỗi nào được đưa ra và kết quả khớp với iterable ngắn nhất.

Không. Đối tượng map là một iterator sẽ bị cạn kiệt sau một lần duyệt. Sau khi bạn lặp qua nó hoặc gọi phương thức list() trên nó, nó sẽ trở nên rỗng. Hãy chuyển đổi nó thành một list trước nếu bạn cần sử dụng lại.

Trong học máy, hàm map() áp dụng các chức năng tiền xử lý trên nhiều tập dữ liệu, chẳng hạn như chia tỷ lệ số, phân tách văn bản thành các token hoặc biến đổi các đặc trưng trước khi huấn luyện. Nó cung cấp một cách thức gọn gàng và hiệu quả để thực hiện cùng một thao tác trên nhiều mẫu dữ liệu.

Đúng vậy. GitHub Copilot tự động hoàn thành các lệnh map() với hàm và các đối tượng có thể lặp lại phù hợp, và các công cụ AI dựa trên tác nhân có thể tái cấu trúc các vòng lặp thành các biểu thức map(), sau đó chạy thử nghiệm của bạn để xác nhận rằng hành vi không thay đổi.

Tóm tắt bài viết này với: