跳到主要内容

Python 字符串 maketrans() 方法

简单来说,maketrans() 方法是一个静态方法,它创建了字符与其翻译/替换的一对一映射。

它为翻译创建了每个字符的 Unicode 表示。

然后,这个翻译映射在 translate() 方法中用于将字符替换为其映射的字符。

maketrans() 方法的语法是:

string.maketrans(x[, y[, z]])

这里,y 和 z 是可选参数。

字符串 maketrans() 参数

maketrans() 方法接受 3 个参数:

  • x - 如果只提供一个参数,它必须是一个字典。 字典应包含从单字符字符串到其翻译的一对一映射,或者从 Unicode 数字(97 对应 'a')到其翻译。
  • y - 如果传递两个参数,它必须是两个等长的字符串。 第一个字符串中的每个字符都是替换到第二个字符串中相应索引的字符。
  • z - 如果传递三个参数,第三个参数中的每个字符都映射到 None。

String maketrans() 的返回值

maketrans() 方法返回一个翻译表,其中包含 Unicode 序数到其翻译/替换的一对一映射。

示例 1:使用字典和 maketrans() 创建翻译表

# 示例字典
dict = {"a": "123", "b": "456", "c": "789"}
string = "abc"
print(string.maketrans(dict))

# 示例字典
dict = {97: "123", 98: "456", 99: "789"}
string = "abc"
print(string.maketrans(dict))

输出

{97: '123', 98: '456', 99: '789'}
{97: '123', 98: '456', 99: '789'}

这里,定义了一个字典 dict。它包含了字符 a、b 和 c 到 123、456 和 789 的映射。

maketrans() 创建了字符的 Unicode 序数到其相应翻译的映射。

因此,97 ('a') 映射到 '123',98 ('b') 映射到 456,99 ('c') 映射到 789。这可以从两个字典的输出中看出。

此外,如果字典中有两个或更多字符被映射,它会引发异常。

示例 2:使用两个字符串和 maketrans() 创建翻译表

# 第一个字符串
firstString = "abc"
secondString = "def"
string = "abc"
print(string.maketrans(firstString, secondString))

# 示例字典
firstString = "abc"
secondString = "defghi"
string = "abc"
print(string.maketrans(firstString, secondString))

输出

{97: 100, 98: 101, 99: 102}
ValueError: the first two maketrans arguments must have equal length

首先,定义了两个等长的字符串 abcdef,并创建了相应的翻译。

只打印第一个翻译,给出了 firstString 中每个字符的 Unicode 序数到 secondString 中相同索引字符的一对一映射。

在这种情况下,97 ('a') 映射到 100 ('d'),98 ('b') 映射到 101 ('e'),99 ('c') 映射到 102 ('f')。

尝试为长度不等的字符串创建翻译表会引发 ValueError 异常,表明字符串必须等长。

示例 3:带有可移除字符串的翻译表和 maketrans()

# 第一个字符串
firstString = "abc"
secondString = "def"
thirdString = "abd"
string = "abc"
print(string.maketrans(firstString, secondString, thirdString))

输出

{97: None, 98: None, 99: 102, 100: None}

首先,创建了两个字符串 firstString 和 secondString 之间的映射。

然后,第三个参数 thirdString 重置了其中每个字符的映射为 None,并为不存在的字符创建了新的映射。

在这种情况下,thirdString 重置了 97 ('a') 和 98 ('b') 的映射为 None,并为 100 ('d') 创建了新的映射为 None