Python 字符串 maketrans() 方法

Python maketrans() 语法

maketrans() 是 Python 字符串的一个静态方法,它用于创建一个映射表(也叫 “翻译表”)。大多数情况下,maketrans() 都是搭配 translate() 一起使用。

语法:

str.maketrans(x, y, z)

说明:

maketrans() 方法接收 3 个参数,它的参数使用有以下 3 种情况。

  • 如果只提供了 1 个参数,那么它必须是一个字典。
  • 如果只提供了 2 个参数,则它们必须是两个长度相等的字符串。
  • 如果提供了 3 个参数,则第 3 个参数中的每个字符都映射到 None。

注意:

  • maketrans() 不执行实际的替换,它只是生成一个映射规则。实际的替换操作,需要通过 translate() 方法来完成。
  • maketrans() 的字符替换是基于单个字符的,它不支持子字符串替换(如果需要子字符串替换,应该使用 replace() 方法)。

Python maketrans() 摘要

使用频率
修改原字符串
官方文档 查看
相关方法 translate()replace()

Python maketrans() 示例

接下来,我们通过几个简单的例子来讲解 Python maketrans() 方法是如何使用的。

示例 1:maketrans() 只带 1 个参数

d = {'a': 'Python', 'b': 'C++', 'c': 'Java'}
result = str.maketrans(d)
print(result)

运行结果如下。

{97: 'Python', 98: 'C++', 99: 'Java'}

分析:

在 Python 3 中,maketrans() 是 str 类的静态方法,因此我们直接使用 str.maketrans() 来调用,不需要通过具体的字符串实例。

在这个例子中,maketrans() 会将字典的键 'a'、'b'、'c' 转换成对应的 Unicode 编码值作为映射表的新键。

示例 2:maketrans() 只带 2 个参数

s1 = 'abcde'
s2 = 'hijkl'
result = str.maketrans(s1, s2)
print(result)

运行结果如下。

{97: 104, 98: 105, 99: 106, 100: 107, 101: 108}

分析:

当 maketrans() 带 2 个参数时,要求两个参数都是字符串并且长度一致。'a'(97)映射到了 'h'(104),'b'(98)映射到了 'i'(105),依次类推,最终生成了一一对应的翻译表。

示例 3:maketrans() 只带 3 个参数

s1 = 'abc'
s2 = 'def'
s3 = 'aij'
result = str.maketrans(s1, s2, s3)
print(result)

运行结果如下。

{97: None, 98: 101, 99: 102, 105: None, 106: None}

分析:

当带有第 3 个参数时,第 3 个参数指定的字符会被映射为 None(即在后续 translate() 替换时会被直接删除)。不仅如此,第 3 个参数的优先级最高!虽然 s1 试图将 'a' 映射为 'd'(100),但由于 s3 中也包含了 'a',它会强行覆盖之前的规则,将 'a' 的映射值强制设定为 None。

提示: maketrans() 单独使用并没有太多意义,它创建的映射表主要是搭配 translate() 方法来使用,具体请查看:Python translate() 方法

示例 4:maketrans() 批量替换标点符号

table = str.maketrans(',。!?', ',.!?')
s = '你好,绿叶!'
print(s.translate(table))

运行结果如下。

你好,绿叶!

分析:

在上面例子中,我们使用 maketrans() 和 translate() 这 2 个方法来实现批量替换标点符号。

上一篇: expandtabs()

下一篇: translate()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号