Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hàm maketrans() và translate() trong Python

Phương thức maketrans() tạo bảng ánh xạ ký tự dùng cho translate() để thay thế hàng loạt ký tự trong chuỗi.

Cú pháp maketrans()

string.maketrans(x[, y[, z]])
  • x (1 đối số): dictionary ánh xạ 1-1 từ ký tự/Unicode sang giá trị thay thế.
  • x, y (2 đối số): hai chuỗi cùng độ dài, ký tự ở vị trí i trong x được thay bằng ký tự vị trí i trong y.
  • x, y, z (3 đối số): ký tự trong z được ánh xạ thành None (xóa bỏ).

Ví dụ 1: Dictionary

dict = {"a": "123", "b": "456", "c": "789"}
my_string = "abc"
print(my_string.maketrans(dict))
# Kết quả: {97: '123', 98: '456', 99: '789'}  (97,98,99 là Unicode của a,b,c)

Ví dụ 2: Hai chuỗi

my_string1 = "abc"
my_string2 = "def"
string = "abc"
print(string.maketrans(my_string1, my_string2))
# Kết quả: {97: 100, 98: 101, 99: 102}  (a→d, b→e, c→f)

# Lỗi nếu độ dài khác nhau:
my_string1 = "abc"
my_string2 = "defghi"
print(string.maketrans(my_string1, my_string2))
# ValueError: the first two maketrans arguments must have equal length

Hàm translate()

Áp dụng bảng ánh xạ từ maketrans() để thay thế ký tự.

# Thay thế cơ bản
dict = str.maketrans("abc", "def")
value = "aabbcc"
print(value.translate(dict))  # ddeeff

# Xóa ký tự (tham số thứ 3)
table = str.maketrans("78", "12", "9")
input_str = "123456789"
print(input_str.translate(table))  # 12345612  (7→1, 8→2, 9 bị xóa)

# ROT13 cipher
trans = str.maketrans(
    "abcdefghijklmnopqrstuvwxyz",
    "nopqrstuvwxyzabcdefghijklm"
)
print("gandalf".translate(trans))        # tnaqnys
print("gandalf".translate(trans).translate(trans))  # gandalf (giải mã)

Ứng dụng thực tế

  • Làm sạch dữ liệu văn bản (xóa ký tự đặc biệt).
  • Mã hóa/giải mã đơn giản (ROT13, Caesar cipher).
  • Chuẩn hóa ký tự Unicode.