Sunday, January 19, 2025

[Python] Lesson 53 – Map

-

map() là một hàm tích hợp trong Python dùng để áp dụng một hàm lên tất cả các phần tử trong một iterable (list, tuple, dictionary, set, …) và trả về một danh sách các kết quả.

Cú pháp:

map(function, iterable)

Trong đó:

  • function: hàm sẽ được áp dụng lên từng phần tử của iterable.
  • iterable: một iterable (list, tuple, dictionary, set, …) chứa các phần tử sẽ được áp dụng hàm function lên.

Hàm map() trả về một đối tượng map, đối tượng này là một iterable và chứa các kết quả sau khi áp dụng hàm function lên từng phần tử của iterable.

Ví dụ minh họa:

# Áp dụng hàm square lên mỗi phần tử trong list
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers)  # output: [1, 4, 9, 16, 25]

# Áp dụng hàm upper lên từng phần tử của list các chuỗi
words = ['hello', 'world', 'python']
upper_words = list(map(str.upper, words))
print(upper_words)  # output: ['HELLO', 'WORLD', 'PYTHON']

Ở ví dụ đầu tiên, hàm map() được sử dụng để áp dụng hàm lambda x: x**2 lên từng phần tử trong list numbers, trả về list mới chứa các phần tử đã được bình phương.

Ở ví dụ thứ hai, hàm map() được sử dụng để áp dụng hàm str.upper() lên từng phần tử trong list words, trả về list mới chứa các phần tử đã được viết hoa.

Dưới đây là ví dụ minh họa về map trong Python:

Ví dụ 1: Áp dụng hàm đối với từng phần tử của list

# Áp dụng hàm double đối với từng phần tử của list
numbers = [1, 2, 3, 4, 5]
doubles = map(lambda x: x*2, numbers)
print(list(doubles))  # output: [2, 4, 6, 8, 10]

Trong ví dụ này, hàm map() được sử dụng để áp dụng hàm lambda x: x*2 đối với từng phần tử của list numbers. Kết quả được lưu vào biến doubles dưới dạng một đối tượng map. Để hiển thị kết quả dưới dạng list, ta sử dụng hàm list() để chuyển đổi đối tượng map thành list.

Ví dụ 2: Áp dụng hàm đối với từng phần tử của nhiều list

# Áp dụng hàm add đối với từng phần tử của hai list
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
sums = map(lambda x, y: x+y, numbers1, numbers2)
print(list(sums))  # output: [5, 7, 9]

Trong ví dụ này, hàm map() được sử dụng để áp dụng hàm lambda x, y: x+y đối với từng phần tử của hai list numbers1numbers2. Kết quả được lưu vào biến sums dưới dạng một đối tượng map. Để hiển thị kết quả dưới dạng list, ta sử dụng hàm list() để chuyển đổi đối tượng map thành list.

Ví dụ 3: Áp dụng hàm đối với từng phần tử của một tuple trong một list

# Áp dụng hàm to_upper_case đối với từng phần tử thứ hai của các tuple trong list
data = [(1, 'apple'), (2, 'banana'), (3, 'cherry')]
upper_case = map(lambda x: (x[0], x[1].upper()), data)
print(list(upper_case))  # output: [(1, 'APPLE'), (2, 'BANANA'), (3, 'CHERRY')]

Kết quả:

[(1, 'APPLE'), (2, 'BANANA'), (3, 'CHERRY')]

Đoạn code trên sử dụng hàm map để áp dụng hàm to_upper_case đối với từng phần tử thứ hai của mỗi tuple trong list data. Cụ thể, hàm map sử dụng lambda function để xử lý từng phần tử trong data, lấy phần tử đầu tiên của mỗi tuple và giữ nguyên giá trị, và chuyển đổi phần tử thứ hai thành chữ hoa bằng cách sử dụng phương thức upper(). Kết quả cuối cùng được trả về dưới dạng một list các tuple đã được chuyển đổi.

Ví dụ 3: Một ví dụ về việc sử dụng map trong quản trị hệ thống Linux là khi cần phải thực hiện một số thao tác trên tập tin hoặc thư mục.

Ví dụ, giả sử chúng ta có một thư mục chứa một số file và cần thực hiện việc đổi tên cho tất cả các file đó bằng cách thay thế khoảng trắng trong tên bằng dấu gạch ngang. Ta có thể sử dụng map kết hợp với hàm os.rename để thực hiện công việc này.

Dưới đây là một ví dụ về cách sử dụng map để đổi tên tất cả các file trong một thư mục:

import os

# đường dẫn đến thư mục chứa các file
directory = '/path/to/directory'

# danh sách các file trong thư mục
files = os.listdir(directory)

# định dạng tên mới cho file
new_name = lambda name: name.replace(' ', '-')

# đổi tên các file bằng cách sử dụng hàm os.rename và map
list(map(lambda name: os.rename(os.path.join(directory, name), os.path.join(directory, new_name(name))), files))

Trong ví dụ này, ta đầu tiên lấy danh sách các file trong thư mục sử dụng hàm os.listdir. Sau đó, ta định nghĩa một hàm lambda new_name để định dạng lại tên mới cho mỗi file. Cuối cùng, ta áp dụng hàm os.rename lên tất cả các file trong danh sách sử dụng map và hàm lambda new_name. Kết quả là tất cả các file trong thư mục được đổi tên bằng cách thay thế khoảng trắng trong tên bằng dấu gạch ngang.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories