Python String maketrans() 函数用法

2023-09-17 22:22:11

maketrans() 方法返回一个映射表,该映射表将给定字符串中的每个字符映射到位于相同位置的第二个字符串中的字符。此映射表与 translate() 方法一起使用,该方法将根据映射表替换字符。

语法:

str.maketrans(x, y, z)

Parameters:

t
  1. x:这可以是字典或字符串。如果仅提供一个参数,则此参数必须是包含键和值映射表的字典。 键可以是单个字符或 Unicode 数字(例如 97 表示"a"),值可以是需要替换为指定为 key 的字符的任何内容。如果指定了两个或多个参数,则此参数必须是指定要替换的字符的字符串。
  2. y:可选。此参数的长度应与参数 x 相同。第一个字符串中的每个字符都是第二个字符串中相应索引的替换。
  3. z:可选。字符串参数指定要在字符串中删除的字符。
  4. t

返回值:

返回一个字典,其中包含 unicode 字符到其替换项的映射。

下面的示例创建一个包含 Unicode 字符映射表的字典。

t
mystr = 'Most'
mappingtbl = mystr.maketrans('M','H')
print(mappingtbl)

输出:

{77: 72}

在上面的示例中,maketrans() 方法返回 Unicode 字符的字典,其中键是 M 的 unicode 字符,值是 H 的 unicode 字符。这是一个简单的映射表,仅包含单个字符的一个映射。现在,此映射表在 translate() 方法中传递,该方法将按照映射表替换所有字符,如下所示。

t
mystr = 'Most'
mappingtbl = mystr.maketrans('M','H')
newstr = mystr.translate(mappingtbl) # pass mapping table in translate()
print(newstr)

输出:

Host

因此,它只是将"M"替换为"H"并返回一个新字符串。下面替换指定为字符串的多个字符。

t
mystr = 'Most'
mappingtbl = mystr.maketrans('Mts','Hdl')
print('Mapping table: ', mappingtbl)
newstr = mystr.translate(mappingtbl)
print('Translation: ', newstr)

输出:

Mapping table: {77: 72, 116: 100, 115: 108}
New string: Hold

在上面的示例中,映射表包含字符串"Mts"中每个字符的替换。translate()方法分别将"M"、"t"、"s"字符替换为"H"、"d"、"l"。

请注意,参数 x 和 y 的长度必须相等,否则将引发错误。

mystr = 'Most'
mappingtbl = mystr.maketrans('Mts','Hd')

输出:

ValueError: the first two maketrans arguments must have equal length

maketrans()方法中的第三个参数映射到 None,这意味着如果找到它,它将被删除,如下所示。

t
mystr = 'Most'
mappingtbl = mystr.maketrans('M','H' ,'s')
print('Mapping table: ', mappingtbl)
newstr = mystr.translate(mappingtbl)
print('Translation: ', newstr)

输出:

Mapping table: {77: 72, 115: None}
Translation: Hot

通过将字典传递给 maketrans() 方法以形成映射表并在 translate 方法中使用它来实现相同的事情,如下所示。

t
mystr = 'Most'
mapdict = {'M': 72, 's':None}
mappingtbl = mystr.maketrans(mapdict)
print('Mapping table: ', mappingtbl)
newstr = mystr.translate(mappingtbl)
print('Translation: ', newstr)

输出:

Mapping table:  {77: 72, 115: None}
Translation: Hot

您可以在字典中指定实际字符,而不是将 unicode 字符指定为值,如下所示。

t
mystr = 'Most'
mapdict = {'M': 'H', 's': 'l', 't':'d'}
mappingtbl = mystr.maketrans(mapdict)
print('Mapping table: ', mappingtbl)
newstr = mystr.translate(mappingtbl)
print('Translation: ', newstr)

输出:

Mapping table:  {77: 'H', 115: 'l', 116: 'd'}
Translation: Hold