Hàm map () trong Python, được giải thích với các ví dụ

Spread the love

Trong hướng dẫn này, bạn sẽ học cách sử dụng hàm map () trong Python để áp dụng một hàm trên tất cả các mục của một tệp có thể lặp lại.

Python hỗ trợ mô hình lập trình chức năng cho phép bạn xác định các tác vụ dưới dạng tính toán các chức năng theo chương trình. Bạn có thể coi các hàm Python như các đối tượng: một hàm có thể lấy một hàm khác làm tham số và trả về một hàm khác.

Hàm map () nhận một hàm làm đối số và cho phép bạn áp dụng nó cho tất cả các mục trong một chuỗi.

Đến cuối hướng dẫn này, bạn sẽ có thể sử dụng hàm map () trong Python – để viết lại các vòng lặp dài dòng và các phần hiểu danh sách. Bạn sẽ viết mã một số ví dụ để hiểu các cách khác nhau mà bạn có thể sử dụng hàm map ().

Cách áp dụng một hàm cho các phần tử của danh sách Python

Hãy bắt đầu cuộc thảo luận của chúng ta bằng một ví dụ .👩‍🏫

Ở đây nums là một danh sách các số.

nums = [2,4,3,7]

Tiếp theo, hãy xem xét hàm self_pow (). Hàm self_pow () nhận một số làm đối số và trả về số được nâng lên thành lũy thừa của chính số đó: n ** n.

Trong Python, ** là toán tử lũy thừa. a ** b trả về giá trị của a được nâng lên lũy thừa b, ab.

def self_pow(n):
  return n**n

VIỆC CẦN LÀM: Để tạo một danh sách nums_pow mới bằng cách áp dụng hàm self_pow () cho mọi phần tử trong danh sách nums.

Sử dụng cho Vòng lặp

Để làm điều này, bạn có thể sử dụng vòng lặp for trong Python:

  • Đối với mọi số trong danh sách nums, hãy gọi hàm self_pow () với đối số là num.
  • Nối kết quả của lời gọi hàm vào danh sách mới nums_pow.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

Trong đầu ra, mọi số num được nâng lên thành chính nó. Các phần tử trong danh sách nums_pow như sau: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Sử dụng tính năng hiểu danh sách

Bạn có thể làm cho điều này ngắn gọn bằng cách sử dụng khả năng hiểu danh sách. Từ vòng lặp for rõ ràng ở trên, chúng ta có thể xác định biểu thức đầu ra và danh sách để lặp qua.

Sau đó, chúng tôi có thể sửa đổi biểu thức hiểu danh sách chung:

new_list = [<output expression> for item in iterable]

Biểu thức hiểu danh sách để tạo danh sách nums_pow như sau:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

Đầu ra giống như kết quả từ việc sử dụng vòng lặp for, như mong đợi.

Output
[4, 256, 27, 823543]

Thay vì hiểu vòng lặp và danh sách, bạn có thể sử dụng hàm map () trong Python với cú pháp ngắn gọn và giúp áp dụng hàm cho tất cả các mục trong một tệp có thể lặp lại. Hãy bắt đầu bằng cách học cú pháp của hàm bản đồ.

Bản đồ Python () Cú pháp hàm

Cú pháp chung để sử dụng hàm map () trong Python như sau:

map(function, iterable_1,[iterable_2,...,iterable_n])

Hàm map () nhận vào ít nhất hai đối số, một hàm và một hàm có thể lặp.

  Cách chuyển đổi và tùy chỉnh dạng xem hội thoại trong Outlook

Trong cú pháp trên:

  • hàm biểu thị một hàm Python hoặc nói chung, bất kỳ Python nào có thể gọi được. Điều này bao gồm các hàm, lớp, phương thức cá thể và lớp do người dùng định nghĩa và tích hợp sẵn, v.v.
  • có thể lặp lại là bất kỳ Python hợp lệ nào có thể lặp lại, chẳng hạn như danh sách, tuple và chuỗi.
  • Hàm map () được áp dụng và hàm được sử dụng cho mọi phần tử trong tệp có thể lặp lại.

Hàm map () trả về cái gì?

Nó trả về một đối tượng bản đồ. Sau đó, bạn có thể truyền đối tượng bản đồ vào một danh sách bằng cú pháp: list (map (chức năng, có thể lặp)).

Tùy thuộc vào trường hợp sử dụng, bạn có thể truyền nó thành một tuple Python.

Bây giờ bạn đã học được cú pháp của hàm map () trong Python, hãy bắt đầu viết mã các ví dụ.

Bạn nên có Python 3.x để làm theo hướng dẫn này. Ngoài ra, bạn có thể chạy các đoạn mã trong trình chỉnh sửa Python trực tuyến của techpoe.com.

Cách sử dụng hàm map () với các hàm do người dùng xác định

# 1. Trước đây, chúng tôi đã áp dụng hàm self_pow () cho mọi số trong danh sách nums. Trong cú pháp cho hàm map (), chúng ta có thể chuyển vào hàm self_pow và danh sách nums làm đối số.

Lưu ý: Bạn chỉ nên chỉ định tên của hàm chứ không phải lệnh gọi hàm. Sử dụng self_pow chứ không phải self_pow ().

Hàm map () trả về một đối tượng bản đồ.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Sau đó, chúng ta có thể truyền đối tượng bản đồ vào một danh sách bằng cách sử dụng hàm list (), như hình dưới đây.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Đây là kết quả đầu ra là mọi num trong nums được ánh xạ tới numnum trong danh sách nums_pow.

Output
[4, 256, 27, 823543]

# 2. Hãy xem xét hàm inch_to_cm () sau đây chuyển đổi inch sang cm. 1 inch = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Để chuyển đổi các giá trị inch trong danh sách inch sang cm, bạn có thể sử dụng hàm map () như được hiển thị trong ô mã bên dưới.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

Danh sách cms chứa các giá trị inch được biểu thị bằng cm.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

Cách sử dụng hàm map () với các hàm tích hợp

Trong phần này, chúng ta sẽ học cách sử dụng map () với các hàm tích hợp trong Python.

# 1. Chuỗi danh sách là danh sách các ngôn ngữ lập trình. Bạn muốn tạo một danh sách mới string_upper chứa các chuỗi ngôn ngữ lập trình ở dạng chữ hoa.

strings = ['JavaScript','Rust','Python','Go']

Phương thức chuỗi tích hợp .upper () hoạt động trên một chuỗi và trả về một bản sao được định dạng bằng chữ hoa.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

Danh sách string_upper bao gồm các chuỗi trong chuỗi danh sách được định dạng bằng chữ hoa.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

# 2. Hàm len () tích hợp sẵn trong Python nhận một chuỗi làm đối số và trả về độ dài của nó. Để tìm độ dài của mỗi chuỗi trong danh sách chuỗi, chúng ta có thể sử dụng hàm map () và áp dụng hàm độ dài trên mỗi chuỗi, như hình dưới đây.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

# 3. Bạn có thể sử dụng hàm map () với các bộ sưu tập khác như bộ giá trị.

Ví dụ sau đây chứa một bộ dữ liệu chứa thông tin về số phòng ngủ, diện tích và thành phố mà một ngôi nhà tọa lạc.

  Cách xóa sạch iPhone (Xóa iPhone) trước khi bán

Trong Python, hàm type () trả về kiểu dữ liệu của bất kỳ đối tượng Python nào. Để có được kiểu dữ liệu của tất cả các mục trong bộ tuple này, bạn có thể sử dụng hàm map () để gọi hàm loại trên mỗi bộ giá trị.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Chúng tôi đã truyền đối tượng bản đồ thành một bộ tuple. Bạn cũng có thể truyền vào danh sách hoặc bất kỳ bộ sưu tập nào khác.

Trong kết quả đầu ra bên dưới, chúng ta thấy rằng các kiểu dữ liệu của 2, 758.5 ​​và Bangalore, đã được suy ra là ‘int’, ‘float’ và ‘str’, tương ứng.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. Trong Python, bạn có thể nhập các mô-đun tích hợp sẵn và sử dụng các chức năng được xác định trong các mô-đun.

Để tính căn bậc hai của mọi số trong danh sách nums, bạn có thể sử dụng hàm căn bậc hai sqrt từ mô-đun toán học.

import math
nums = [30,90,34,45,97]
nums_sqrt = list(map(math.sqrt,nums))
print(nums_sqrt)
Output
[5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

Kết quả đầu ra trên rất khó để phân tích cú pháp và theo dõi. Bạn có thể muốn làm tròn mỗi giá trị căn bậc hai, hai chữ số thập phân.

Cách làm tròn số dấu chấm động bằng Python

Hãy xác định một hàm round_2 () nhận một giá trị dấu phẩy động và làm tròn nó đến hai chữ số thập phân.

def round_2(num):
  return round(num,2)

Bây giờ, bạn có thể sử dụng hàm map () với round_2 và danh sách nums_sqrt.

nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Bạn cũng có thể sử dụng các hàm map () lồng nhau, trong đó hàm bản đồ bên trong được sử dụng để tính danh sách căn bậc hai nums_sqrt và hàm bản đồ bên ngoài thực hiện thao tác làm tròn.

nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums))))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Kết quả đầu ra giống hệt nhau trong cả hai cách tiếp cận trên. Tuy nhiên, bạn nên đảm bảo rằng mã có thể đọc được và có thể bảo trì khi lồng các hàm như được hiển thị ở trên.

Cách sử dụng hàm map () với các hàm Lambda

Trong các phần trước, bạn đã học cách sử dụng hàm map () trong Python với các hàm cài sẵn và do người dùng định nghĩa. Bây giờ bạn sẽ học cách sử dụng hàm map () với các hàm lambda, ẩn danh trong Python.

Đôi khi, bạn sẽ có một hàm mà phần thân của nó chỉ chứa một dòng mã và bạn có thể chỉ cần sử dụng hàm một lần và không tham chiếu nó ở nơi khác trong chương trình. Bạn có thể định nghĩa các hàm như một hàm lambda trong Python.

Lưu ý: lambda args: biểu thức là cú pháp chung để sử dụng một hàm lambda trong Python.

# 1. Hãy xem xét các chuỗi danh sách sau đây. Giả sử bạn muốn lấy một danh sách string_rev – chứa một bản sao đảo ngược của mỗi chuỗi.

strings = ['JavaScript','Rust','Python','Go']

Chúng ta có thể đảo ngược một chuỗi Python bằng cách sử dụng phương pháp cắt chuỗi.

Lưu ý: Đây là tổng quát của biểu thức cắt chuỗi str[start:stop:step].

– Không có giá trị bắt đầu và dừng, lát cắt bắt đầu ở đầu chuỗi và kéo dài đến cuối chuỗi.
– Giá trị âm của bước cung cấp cho các lát cắt bắt đầu từ cuối chuỗi.
– Do đó, str[::-1] trả về một bản sao đảo ngược của str.

Bạn có thể sử dụng hàm lambda này: lambda x: x[::-1]Bên trong chức năng bản đồ, như hình dưới đây.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Như với các ví dụ khác, chúng tôi truyền đối tượng bản đồ vào một danh sách. Trong đầu ra, chúng ta thấy rằng mỗi chuỗi trong chuỗi danh sách đã được đảo ngược.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

# 2. Trong phần trước, chúng ta đã tính căn bậc hai của mọi số trong danh sách số và sau đó làm tròn mỗi giá trị căn bậc hai đến hai chữ số thập phân.

  Cách sử dụng Google Lens để xác định đối tượng trong ảnh

Chúng tôi đã sử dụng hàm round_2 () để thực hiện việc này. Hãy viết lại hàm round_2 () dưới dạng một hàm lambda và sử dụng nó với hàm map () được mô tả bên dưới.

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Như đã thấy bên dưới, đầu ra giống hệt với những gì chúng ta thu được khi sử dụng hàm round_2 ().

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Cách sử dụng hàm map () với nhiều lặp lại

Trong các ví dụ đã thấy, chúng tôi đã áp dụng một hàm trên tất cả các mục của chính xác một mục có thể lặp lại.

Đôi khi, chúng ta có thể có các hàm có hai hoặc nhiều đối số. Trong trường hợp này, mỗi đối số được lưu trữ trong một danh sách hoặc bất kỳ bộ sưu tập nào tương tự.

Chúng ta cũng có thể sử dụng hàm map () trong Python với nhiều danh sách.

# 1. Hãy xem xét vùng hàm sau () chấp nhận chiều dài và chiều rộng làm đầu vào và trả về diện tích, chiều dài * chiều rộng.

def area(length,breadth):
  return length*breadth

Chiều dài và chiều rộng của các hình chữ nhật khác nhau được lưu trữ trong hai danh sách riêng biệt, chiều dài và chiều rộng tương ứng.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Chúng ta có thể sử dụng hàm map () để áp dụng hàm diện tích cho các danh sách trên bằng cách chuyển vào cả danh sách độ dài và độ rộng.

areas = list(map(area,lengths,breadths))
print(areas)

Bởi vì vùng hàm chấp nhận hai đối số, giá trị độ dài và độ rộng được sử dụng từ độ rộng độ dài danh sách, tương ứng.

Output
[36, 32, 60, 198]

# 2. Mô-đun toán học Python có hàm log giúp chúng ta tính logarit của một số với bất kỳ cơ số nào.

Lưu ý: log (x, base) trả về giá trị của log x cho cơ sở được chỉ định bởi cơ sở giá trị, log cơ số x. Nếu cơ số không được chỉ định, giá trị cơ số mặc định là e (log tính logarit tự nhiên).

Trong ví dụ này:

  • Danh sách x tương ứng với các giá trị mà bạn muốn tính logarit.
  • Danh sách cơ số chứa tất cả các giá trị cơ số sẽ được sử dụng trong tính toán logarit.
x = [2,6,12,10]
base = [2,3,2,5]

Chúng ta có thể sử dụng hàm map () trong Python với math.log, các danh sách, x và base để có được danh sách mới log_x, như sau.

log_x = list(map(math.log,x,base))
print(log_x)

Đây là kết quả đầu ra.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Sự kết luận

Dưới đây là tóm tắt những gì bạn đã học được trong hướng dẫn này:

  • Hàm map () trong Python nhận vào ít nhất hai đối số: một hàm và một có thể lặp, với ánh xạ cú pháp (hàm, (các) có thể lặp).
  • Hàm có thể là bất kỳ hàm Python hợp lệ nào có thể gọi được.
  • Khi hàm nhận k đối số, hãy sử dụng hàm map () với hàm và mỗi đối số trong số k đối số trong một hàm có thể lặp.

Tiếp theo, học cách làm việc với các bộ trong Python.

x