首页 > 开发 > Python > 正文

Python maketrans()函数

2023-04-24 19:21:41
字体:
来源:转载
供稿:网友

Python maketrans()是一个静态函数(使用str类型直接调用,而非字符串),其作用是为str.translate()函数提供转换字符映射表。

maketrans()语法格式

官方文档给出的语法格式如下:

static str.maketrans(x[, y[, z]])

参数

该函数有三个参数,其中后两个是可选参数。

(1)该函数只有一个参数 x 时, x 必须是字典类型,以给出转换的映射关系。字典的键取值可以是:对应某个Unicode字符的整型序数,或者字符(长度为1的字符串);键对应的值取值可以为Unicode字符序数(整型),任意长度的字符串或None

(2)该函数取两个参数时, x y 必须是等长的字符串。在生成的结果字典中, x 中的每一个字符将于 y 中相同位置的字符进行匹配;

(3)该函数取第三个参数时,该参数 z 必须是一个字符串,字符串中的每个字符将使用 None 进行匹配,即在使用 str.translate()函数 str 进行转换时, str 中包含在 z 中的字符将被删除掉。

返回值

该函数的返回值是字典类型。是由 x 中的字符对应的Unicode序数作为键, y 中对应的字符序数作为元素值构成的字典,当指定 z 参数时, z 参数中的每个字符Unicode序数也会作为字典中的键,而对应的值为 None .

Python maketrans()函数

maketrans()函数示例

1、只有一个参数

当给定一个参数x时,x必须是字典类型。

>>> d1 = str.maketrans({98:104})
>>> d1
{98: 104}
>>> type(d1)
<class 'dict'>
>>> d2 = str.maketrans({'a':'b'})
>>> d2
{97: 'b'}
>>> d3 = str.maketrans({'a':'abcd'})
>>> d3
{97: 'abcd'}
>>> d4 = str.maketrans({'a':None,'b':'c',100:110,112:'abc'})
>>> d4
{97: None, 98: 'c', 100: 110, 112: 'abc'}
>>> d5 = str.maketrans('a')
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    d5 = str.maketrans('a')
TypeError: if you give only one argument to maketrans it must be a dict

>>> d5 = str.maketrans(103)
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    d5 = str.maketrans(103)
TypeError: if you give only one argument to maketrans it must be a dict

>>> d5 = str.maketrans(None)
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    d5 = str.maketrans(None)
TypeError: if you give only one argument to maketrans it must be a dict

>>>  

从上面的例子可以看出,当所给的参数不是字典类型时,将引发“TypeError”错误。

2、给定两个参数

当给定两个参数x和y时,x和y必须是等长的字符串。

>>> x = '1234'
>>> y = 'abcd'
>>> print(str.maketrans(x,y))
{49: 97, 50: 98, 51: 99, 52: 100}
>>> print(str.maketrans('xyz','ab'))
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    print(str.maketrans('xyz','ab'))
ValueError: the first two maketrans arguments must have equal length

>>> print(str.maketrans('ab','xyz'))
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    print(str.maketrans('ab','xyz'))
ValueError: the first two maketrans arguments must have equal length

>>> print(str.maketrans('abc','xy '))
{97: 120, 98: 121, 99: 32}
>>> 

注意:最后一个例子中 y 参数的字符串中最后一个字符为空格。同时,我们注意到如果两个字符串不等长时,将引发“ValueError”错误。

3、给定3个参数

给定三个参数时,z参数是一个字符串,用于指定要删除的字符。

>>> x = 'abcd'
>>> y = 'wxyz'
>>> z = 'hij'
>>> print(str.maketrans(x, y, z))
{97: 119, 98: 120, 99: 121, 100: 122, 104: None, 105: None, 106: None}
>>> 

从上面的例子可以看出,'h', 'i', 'j' 三个字符被转换成了None,即在使用str.translate()函数时,这些字符将被删除掉。

4、maketrans()函数与translate()函数配合使用

前面说过,maketrans()函数主要是为translate()函数生成转换的字符映射表,下面的例子将演示两者如何配合使用的。

>>> x = 'aeiou'
>>> y = 'vwxyz'
>>> z = 'rst'
>>> dic = str.maketrans(x, y, z)
>>> str1 = 'I love my country as much as i love my life.'
>>> res = str1.translate(dic)
>>> print(res)
I lyvw my cyzny v mzch v x lyvw my lxfw.
>>> 

上面演示了maketrans()函数和translate()函数的配合使用方法。从结果中可以看出,translate()函数执行完毕后,str1中的字符'a', 'e', 'i', 'o', 'u' 五个字母(由参数x给定的字符串中的字符)分别被 'v', 'w', 'x', 'y' 和 'z' (由参数y给定的字符串中的字符)给替换掉了,同时在str1中删除掉了参数z中指定的字符。

从这个例子中,我们也注意到,maketrans()函数和translate()函数的参数值是大小写敏感的,原因在于其按照Unicode字符序数来处理字符。

总结

以上讲解了Python中静态函数maketrans()的参数及使用方法,并给出了其与translate()函数配合使用的例子。

实际上,maketrans()函数就是生成由键值对构成的字符映射表,其结果作为translate()函数的参数,用于对字符串中的字符进行替换,maketrans()函数中x参数用于给出需要替换的字符构成的字符串,y参数用于给出替换后的字符构成的字符串,z参数给出需要在字符串删除掉的字符构成的字符串。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表