资讯专栏INFORMATION COLUMN

字符串的这个东西-翻译表

Snailclimb / 1813人阅读

摘要:不知道大家是否见过这个东西反正我清楚记得我是见过的可是为什么会写这个东西有以下一个场景怎样将一个字符串中的中文字符统一转换成英文字符不知道大家会怎样去做先列举一个例子将其中的转换成转换成我的做法是简直就是可是这两个字太可怕了后端老大直接开喷

不知道大家是否见过这个东西,反正我清楚记得我是见过的,可是为什么会写这个东西?有以下一个场景:

怎样将一个字符串中的中文字符统一转换成英文字符?

不知道大家会怎样去做?先列举一个例子:

"hello i"m jim"将其中的 "e" 转换成 "i" , "o" 转换成 "!"

我的做法是:

s = "hello i"m jim"
ch = "eo"
en_ch = "i!"

for i, c in enumrate(s):
    if c in ch:
        s = s.replace(c, en_ch[ch.index(c)])

简直就是so easy! , 可是... 这两个字太可怕了,后端老大直接开喷,写的啥玩意.难道还有什么好方法?只能悄咪咪的看人家写喽

s = "hello i"m jim"
ch = "eo"
en_ch = "i!"
TRANS_TABLE = {ord(f): ord(t) for f, t in zip(ch, en_ch)}

s.translate(TRANS_TABLE)

呦吼!!!,这是什么鬼?怎么记得在哪里看见过,想不起来了......赶紧百度,原来这是翻译表,怎么操作呢?

from string import maketrans
s = "hello i"m jim"
ch = "eo"
en_ch = "i!"

# python2.0+
# from string import maketrans
# TRANS_TABLE = maketrans(ch, en_ch)
# python3.0+
TRANS_TABLE = str.maketrans(ch, en_ch)

s.translate(TRANS_TABLE)
这和后端老大写的不一样呀?等价吗?
# python2.7
from string import maketrans
maketrans("eo", "i!")
# >>> "x00x01x02x03x04x05x06x07x08	
x0bx0c
x0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f !"#$%&"()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdifghijklmn!pqrstuvwxyz{|}~x7fx80x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90x91x92x93x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0xb1xb2xb3xb4xb5xb6xb7xb8xb9xbaxbbxbcxbdxbexbfxc0xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0xe1xe2xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexff"

# python3.5
str.maketrans("eo", "i!")
# >>> {101: 105, 111: 33}

原来如此...通过上面的注释可以看到python3中的字典表很简单清晰,而python2中是一大串看不懂的十六进制数据,其实在python2中默认将0-255整数对应的字符都先进行了转换生成字符串,然后再将传入的第一个参数字符对应的字符串中的位置用第二个参数字符依次进行替换

如:ÿ对应为255,及默认生成字符串的最后一个十六进制数据xff对应的字符,maketrans("1", "2"),那么会发现上面字符串中的1变成了2,字符串我写在文章最下方.

这就是python2/3的一个处理优化.
这样就可以很方便的去处理字符串,而不是像我这样小白只能循环,当然我也不是只能想到循环,还有正则,哈哈哈,但是感觉这种更舒服.最后感叹一句:革命尚未成功,同志仍需努力...

# "1"替换"2"结果字符串
# x00x01x02x03x04x05x06x07x08	
x0bx0c
x0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f!"#$%&"()*+,-./0223456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~x7fx80x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90x91x92x93x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0xb1xb2xb3xb4xb5xb6xb7xb8xb9xbaxbbxbcxbdxbexbfxc0xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0xe1xe2xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexff
python2中maketrans源码:
l = map(chr, xrange(256))
_idmap = str("").join(l)
del l
# Construct a translation string
_idmapL = None
def maketrans(fromstr, tostr):
    """maketrans(frm, to) -> string

    Return a translation table (a string of 256 bytes long)
    suitable for use in string.translate.  The strings frm and to
    must be of the same length.

    """
    if len(fromstr) != len(tostr):
        raise ValueError, "maketrans arguments must have same length"
    global _idmapL
    if not _idmapL:
        _idmapL = list(_idmap)
    L = _idmapL[:]
    fromstr = map(ord, fromstr)
    for i in range(len(fromstr)):
        L[fromstr[i]] = tostr[i]
    return "".join(L)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44119.html

相关文章

  • 翻译 | 带你秒懂内存管理 - 第一部(共三部)

    摘要:自动内存管理当你在使用时,实际上并不需要考虑内存。这种自动内存管理可以使开发人员更轻松。即使在手动内存管理的语言中,通常会从语言运行时获得一些帮助。这就是为什么许多现代语言使用自动内存管理的原因避免人为错误。 原文地址:A crash course in memory management 原文作者:Lin Clark 译者:黑黑 校对者:Bob 要理解为什么将 Array...

    Tecode 评论0 收藏0
  • Atom飞行手册翻译: 2.13 基本自定义

    摘要:基本的自定义在我们感受到中所有东西的便利之后,让我们看看如何改进它。不像的选择器,的键在每个对象中只能重复一次。语言特定的设置会覆盖全局域的任何设置。作于域的名称显示在设置视图中的每个语言的包中。 基本的自定义 在我们感受到Atom中所有东西的便利之后,让我们看看如何改进它。可能有一些快捷键你经常使用但是感觉很别扭,或者一些颜色不是十分适合你。Atom具有惊人的灵活性,所以让我们对它...

    opengps 评论0 收藏0
  • MySQL常见错误分析与解决方法总结

    摘要:常见错误分析与解决方法总结一翻译不能连接到上的分析这说明计算机是存在的,但在这台机器上却没提供服务。解决同样对症下药,不同的原因不同的处理方法。九翻译有一个语法错误在你的中分析论坛标准的程序是没有语法错误的。表名,可以暂时解决问题。MySQL常见错误分析与解决方法总结 一、Cant connect to MySQL server on localhost (10061)翻译:不能连接到 ...

    番茄西红柿 评论0 收藏0
  • 【译】JavaScript数据结构(1):什么是数据结构

    摘要:它到底是什么,是作用于数据的结构吗这同样是一个模棱两可的术语。最后我还是搞清楚了数据结构的概念,那就简单的把术语数据结构称为数据的结构。目标数据结构系列技术文章,会告诉你数据结构并不是晦涩难懂的,更不是神秘的。 翻译:疯狂的技术宅英文:https://code.tutsplus.com/tut...说明:本文翻译自系列文章《Data Structures With JavaScrip...

    K_B_Z 评论0 收藏0
  • 翻译 Meteor React 制作 Todos - 01 - 创建应用

    摘要:闲扯在翻译之前我还是要简要介绍一下,这是一款跨时代的框架。后来开始使用动态的脚本语言,比如后来以此构成了框架。最为出名的自然是。通过来传递数据,在本地起这种事情使得开发进入了新的阶段。如果你觉得我翻译的很烂,来给我说吧邮件地址 闲扯 在翻译之前我还是要简要介绍一下Meteor,这是一款跨时代的框架。真的,完全没有骗你。 一开始的网站是纯静态页面搭建的。 后来开始使用动态的脚本语言,比如...

    VishKozus 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<