Python字符串translate()

时间:2020-02-23 14:43:32  来源:igfitidea点击:

Python字符串translate()函数返回一个新字符串,该字符串中的每个字符都使用给定的转换表替换。

Python字符串translate()

转换表必须是Unicode常规到Unicode常规,字符串或者无的映射。

我们可以使用makemake()函数创建一个翻译表,或者使用字典映射手动提供它。

我们最多可以将三个字符串参数传递给maketrans()函数。

  • 如果只有一个参数,则它必须是将Unicode序数(整数)或者字符映射到Unicode序数,字符串或者无的字典。

  • 如果有两个参数,则它们必须是长度相等的字符串,并且在结果字典中,x中的每个字符都将映射到y中相同位置的字符。

  • 如果有第三个参数,则它必须是一个字符串,其字符将在结果中映射为None。

Python字符串translate()示例

让我们看一些使用字符串translate()函数的示例。

带有一个参数的maketrans()

s = 'ABCDBCA'

translation = s.maketrans({ord('A'): 'a', ord('B'): ord('b')})  # single argument as dict
print(s.translate(translation))

输出:abCDbCa

结果字符串中的" A"被替换为" a"," B"被替换为" b"。

maketrans()有两个参数

s = 'ABCDBCA'

translation = s.maketrans('A', 'a')

print(s.translate(translation))

translation = s.maketrans('ABCD', 'abcd')
print(s.translate(translation))

输出:

aBCDBCa
abcdbca

第一种翻译是将" A"替换为" a"。

第二个转换具有两个长度相同的字符串参数,并且第一个字符串中的每个字符都与第二个字符串中的相应索引字符进行映射。
因此,结果字符串中的A将被a替代,B将被b替代,C将被c替代,而D被d替代。

如果两个参数字符串的长度不同,则会引发错误。

translation = s.maketrans('AB', 'a')

错误:ValueError:前两个maketrans参数的长度必须相等

带有三个参数的maketrans()

s = 'ABCDBCA'

translation = s.maketrans('AB', 'ab', 'ACD')
print(s.translate(translation))

输出:bb

这里的" A"首先被" a"代替,但由于使用了第三字符串参数,因此被覆盖为"无"。
然后," B"被映射为" b"。
" C"和" D"字符映射为"无"以进行翻译。

如果我们提供三个以上的参数,则会引发错误。

translation = s.maketrans('AB', 'ab', 'CD', 'c')

带有手动映射的Python字符串translate()

s = 'ABCDBCA'

print(s.translate({ord('A'): ord('a'), ord('B'): ord('b'), ord('C'): None}))
print(s.translate({ord('A'): 'X', ord('B'): 'YZ', ord('C'): None}))

输出:

abDba
XYZDYZX

请注意,在第二个语句" B"中将替换为字符串" YZ"。
其他映射是简单的字符到字符替换。
我正在使用ord()函数为翻译映射提供Unicode代码点。