В этом уроке по основам Python, мы рассмотрим строковый метод str.maketrans()
и str.translate()
. В первом методе мы получаем таблицу, во втором методе мы используем ее для сопоставления перевода.
Синтаксис метода str.maketrans():
str.maketrans(x[, y[, z])
Аргументы:
str
- строка в которой нужно сделать перевод.x
- если указан только один аргумент, это должен быть словарь. Он должен содержать преобразование 1 к 1 одной символьной строки или число Unicode в его перевод.y
- если заданы два аргумента, они должны быть двумя строками одинаковой длины. Каждый символ в первой строке является заменой соответствующего индекса во второй строке. (Необязательно)z
— если заданы три аргумента, каждый символ в третьем аргументе сопоставляется с None. (Необязательно)
Метод возвращает таблицу перевода с сопоставлением 1-к-1 порядкового номера Unicode с его переводом/заменой.
Пример:
# Определяем словарь
example_dict = {'h': 12, 'e': 34, 'l': 56, 'l': 78, 'o': 910}
# Определяем строку для сопоставления
string_example = 'hello'
# Выводим результат
print(string_example.maketrans(example_dict))
Результат:
>>> {104: 12, 101: 34, 108: 78, 111: 910}
Функция создает сопоставление порядкового номера символа Unicode с соответствующим переводом.
Помимо этого, если в словаре появятся два или более символа, будет вызвано исключение.
Пример с двумя строками:
# Определяем строки
first_string = 'hello'
second_string = 'world'
# Определяем строку для сопоставления
string_example = 'hello'
# Выводим результат
print(string_example.maketrans(first_string, second_string))
# Определяем строки
first_string = 'hello'
second_string = 'brother'
# Определяем строку для сопоставления
string_example = 'hello'
# Выводим результат
print(string_example.maketrans(first_string, second_string))
Результат:
>>> {104: 119, 101: 111, 108: 108, 111: 100}
>>> Traceback (most recent call last):
>>> File "C:\Users\Razilator\Desktop\Projects\Coding\articles\methods\str_maketrans\main.py", line 20, in <module>
>>> print(string_example.maketrans(first_string, second_string))
>>> ValueError: the first two maketrans arguments must have equal length
В начале определяются две строки одинаковой длины hello и world. Создается соответствующий перевод. Печать только первого перевода приводит к порядковому совпадению каждого символа Unicode в first_string
и того же индексированного символа в second_string
.
При создании таблицы перевода для строк разной длины мы получаем исключение ValueError
.
Пример с тремя аргументами (со съёмной строкой):
# Определяем строки
first_string = 'hello'
second_string = 'world'
third_string = 'hostel'
# Определяем строку для сопоставления
string_example = 'hello'
# Выводим результат
print(string_example.maketrans(first_string, second_string, third_string))
Результат:
>>> {104: None, 101: None, 108: None, 111: None, 115: None, 116: None}
Cоздается сопоставление между двумя строками first_string
и second_string
. После этого, третий аргумент функции third_string
сбрасывает отображение каждого символа в ней на None, а также создает новое сопоставление для несуществующих символов.
Синтаксис метода str.translate():
str.translate(table)
Аргументы:
str
- строка, в которой нужно сопоставить символы.table
- таблица перевода, содержащая сопоставление между двумя символами;
Метод str.translate()
возвращает строку, в которой каждый символ соответствует соответствующему символу в таблице перевода.
Данный метод использует таблицу перевода для замены/перевода символов в заданной строке в соответствии с таблицей сопоставления. Таблица перевода создается методом str.maketrans()
.
Пример с использованием таблицы перевода:
# Определяем строки
first_string = 'hello'
second_string = 'world'
third_string = 'ld'
# Определяем строку для сопоставления
string_example = 'hello'
# Выводим заданную строку
print('Оригинальная строка:', string_example)
# Создаем таблицу сопоставления
translation = string_example.maketrans(first_string, second_string, third_string)
# Выводим результат
print('Строка перевода:', string_example.translate(translation))
Результат:
>>> Оригинальная строка: hello
>>> Строка перевода: wod
Пример с заданной таблицей (создаем словарь вручную):
# Определяем строку для сопоставления
string_example = 'hello'
# Выводим заданную строку
print('Оригинальная строка:', string_example)
# Создаем таблицу сопоставления
translation = {104: 104, 101: 97, 108: 105}
# Выводим результат
print('Строка перевода:', string_example.translate(translation))
Результат:
>>> Оригинальная строка: hello
>>> Строка перевода: haiio