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 个方法来实现批量替换标点符号。
