摘要:不知道大家是否見過這個(gè)東西反正我清楚記得我是見過的可是為什么會(huì)寫這個(gè)東西有以下一個(gè)場(chǎng)景怎樣將一個(gè)字符串中的中文字符統(tǒng)一轉(zhuǎn)換成英文字符不知道大家會(huì)怎樣去做先列舉一個(gè)例子將其中的轉(zhuǎn)換成轉(zhuǎn)換成我的做法是簡直就是可是這兩個(gè)字太可怕了后端老大直接開噴
不知道大家是否見過這個(gè)東西,反正我清楚記得我是見過的,可是為什么會(huì)寫這個(gè)東西?有以下一個(gè)場(chǎng)景:
怎樣將一個(gè)字符串中的中文字符統(tǒng)一轉(zhuǎn)換成英文字符?
不知道大家會(huì)怎樣去做?先列舉一個(gè)例子:
"hello i"m jim"將其中的 "e" 轉(zhuǎn)換成 "i" , "o" 轉(zhuǎn)換成 "!"
我的做法是:
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! , 可是... 這兩個(gè)字太可怕了,后端老大直接開噴,寫的啥玩意.難道還有什么好方法?只能悄咪咪的看人家寫嘍
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)
這和后端老大寫的不一樣呀?等價(jià)嗎?
# 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中是一大串看不懂的十六進(jìn)制數(shù)據(jù),其實(shí)在python2中默認(rèn)將0-255整數(shù)對(duì)應(yīng)的字符都先進(jìn)行了轉(zhuǎn)換生成字符串,然后再將傳入的第一個(gè)參數(shù)字符對(duì)應(yīng)的字符串中的位置用第二個(gè)參數(shù)字符依次進(jìn)行替換
如:?對(duì)應(yīng)為255,及默認(rèn)生成字符串的最后一個(gè)十六進(jìn)制數(shù)據(jù)xff對(duì)應(yīng)的字符,maketrans("1", "2"),那么會(huì)發(fā)現(xiàn)上面字符串中的1變成了2,字符串我寫在文章最下方.
這就是python2/3的一個(gè)處理優(yōu)化.
這樣就可以很方便的去處理字符串,而不是像我這樣小白只能循環(huán),當(dāng)然我也不是只能想到循環(huán),還有正則,哈哈哈,但是感覺這種更舒服.最后感嘆一句:革命尚未成功,同志仍需努力...
# "1"替換"2"結(jié)果字符串 # x00x01x02x03x04x05x06x07x08 x0bx0c x0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f!"#$%&"()*+,-./0223456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~x7fx80x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90x91x92x93x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0xb1xb2xb3xb4xb5xb6xb7xb8xb9xbaxbbxbcxbdxbexbfxc0xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0xe1xe2xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexffpython2中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)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44119.html
摘要:自動(dòng)內(nèi)存管理當(dāng)你在使用時(shí),實(shí)際上并不需要考慮內(nèi)存。這種自動(dòng)內(nèi)存管理可以使開發(fā)人員更輕松。即使在手動(dòng)內(nèi)存管理的語言中,通常會(huì)從語言運(yùn)行時(shí)獲得一些幫助。這就是為什么許多現(xiàn)代語言使用自動(dòng)內(nèi)存管理的原因避免人為錯(cuò)誤。 原文地址:A crash course in memory management 原文作者:Lin Clark 譯者:黑黑 校對(duì)者:Bob 要理解為什么將 Array...
摘要:基本的自定義在我們感受到中所有東西的便利之后,讓我們看看如何改進(jìn)它。不像的選擇器,的鍵在每個(gè)對(duì)象中只能重復(fù)一次。語言特定的設(shè)置會(huì)覆蓋全局域的任何設(shè)置。作于域的名稱顯示在設(shè)置視圖中的每個(gè)語言的包中。 基本的自定義 在我們感受到Atom中所有東西的便利之后,讓我們看看如何改進(jìn)它??赡苡幸恍┛旖萱I你經(jīng)常使用但是感覺很別扭,或者一些顏色不是十分適合你。Atom具有驚人的靈活性,所以讓我們對(duì)它...
摘要:常見錯(cuò)誤分析與解決方法總結(jié)一翻譯不能連接到上的分析這說明計(jì)算機(jī)是存在的,但在這臺(tái)機(jī)器上卻沒提供服務(wù)。解決同樣對(duì)癥下藥,不同的原因不同的處理方法。九翻譯有一個(gè)語法錯(cuò)誤在你的中分析論壇標(biāo)準(zhǔn)的程序是沒有語法錯(cuò)誤的。表名,可以暫時(shí)解決問題。MySQL常見錯(cuò)誤分析與解決方法總結(jié) 一、Cant connect to MySQL server on localhost (10061)翻譯:不能連接到 ...
摘要:它到底是什么,是作用于數(shù)據(jù)的結(jié)構(gòu)嗎這同樣是一個(gè)模棱兩可的術(shù)語。最后我還是搞清楚了數(shù)據(jù)結(jié)構(gòu)的概念,那就簡單的把術(shù)語數(shù)據(jù)結(jié)構(gòu)稱為數(shù)據(jù)的結(jié)構(gòu)。目標(biāo)數(shù)據(jù)結(jié)構(gòu)系列技術(shù)文章,會(huì)告訴你數(shù)據(jù)結(jié)構(gòu)并不是晦澀難懂的,更不是神秘的。 翻譯:瘋狂的技術(shù)宅英文:https://code.tutsplus.com/tut...說明:本文翻譯自系列文章《Data Structures With JavaScrip...
摘要:閑扯在翻譯之前我還是要簡要介紹一下,這是一款跨時(shí)代的框架。后來開始使用動(dòng)態(tài)的腳本語言,比如后來以此構(gòu)成了框架。最為出名的自然是。通過來傳遞數(shù)據(jù),在本地起這種事情使得開發(fā)進(jìn)入了新的階段。如果你覺得我翻譯的很爛,來給我說吧郵件地址 閑扯 在翻譯之前我還是要簡要介紹一下Meteor,這是一款跨時(shí)代的框架。真的,完全沒有騙你。 一開始的網(wǎng)站是純靜態(tài)頁面搭建的。 后來開始使用動(dòng)態(tài)的腳本語言,比如...
閱讀 1588·2021-11-22 15:33
閱讀 1729·2021-11-15 18:01
閱讀 665·2021-10-09 09:43
閱讀 2605·2021-09-22 16:03
閱讀 759·2021-09-03 10:28
閱讀 3550·2021-08-11 10:22
閱讀 2718·2019-08-30 15:54
閱讀 1761·2019-08-30 14:21