Python 字符串 maketrans()

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

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

然后,当在 translate() 方法中使用时,此翻译映射用于将字符替换为与其映射的字符。


maketrans() 方法的语法是

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

这里,yz 是可选参数。


字符串 maketrans() 参数

maketrans() 方法接受 3 个参数

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

字符串 maketrans() 的返回值

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


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

# example dictionary
dict = {"a": "123", "b": "456", "c": "789"}
string = "abc"
print(string.maketrans(dict))

# example dictionary
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() 通过两个字符串创建翻译表

# first string
firstString = "abc"
secondString = "def"
string = "abc"
print(string.maketrans(firstString, secondString))

# example dictionary
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() 通过可删除字符串创建翻译表

# first string
firstString = "abc"
secondString = "def"
thirdString = "abd"
string = "abc"
print(string.maketrans(firstString, secondString, thirdString))

输出

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

这里,首先创建了两个字符串 firstStringsecondString 之间的映射。

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

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


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战