简单来说,maketrans()
方法是一个静态方法,它创建字符到其翻译/替换的一对一映射。
它为翻译创建每个字符的 Unicode 表示。
然后,当在 translate() 方法中使用时,此翻译映射用于将字符替换为与其映射的字符。
maketrans()
方法的语法是
string.maketrans(x[, y[, z]])
这里,y 和 z 是可选参数。
字符串 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
这里首先定义了两个长度相等的字符串 abc
和 def
。并创建了相应的翻译。
只打印第一个翻译会给出 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}
这里,首先创建了两个字符串 firstString 和 secondString 之间的映射。
然后,第三个参数 thirdString 将其中每个字符的映射重置为 None
,并为不存在的字符创建新的映射。
在这种情况下,thirdString 将 97 ('a') 和 98 ('b') 的映射重置为 None
,并为 100 ('d') 创建新的映射,映射到 None
。
另请阅读