Python 中,字符串连接效率最高的方式是?一定出乎你的意料
網(wǎng)上很多文章人云亦云,字符串連接應(yīng)該使用「join」方法而不要用「+」操作。說前者效率更高,它以更少的代價(jià)創(chuàng)建新字符串,如果用「+」連接多個(gè)字符串,每連接一次,就要為字符串分配一次內(nèi)存,效率顯得有點(diǎn)低,這樣的解釋聽起來很有道理,但 Cpython 解釋器是不是真的按照我們說的這樣呢?
今天做了一個(gè)試驗(yàn),結(jié)果可能會(huì)出乎你的意料。
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' defjoin(n):s = "".join((str(i) fori inrange(n)))defformat(n):( "{}"* n).format(*(i fori inrange(n)))defplus(n):s = ""fori inrange(n):s += str(i)上面 3 個(gè)函數(shù)分別表示用「join」和「format」還有「+」操作來連接字符串,從 0 到 n,總共 n 個(gè)數(shù)字連接起來構(gòu)成一個(gè)新的字符串,形如:1234567891011……n。
下面是測試腳本:
每組取了15個(gè)樣本數(shù)據(jù),分別用 1,2,4,8,… 8192 個(gè)數(shù)字相連接,得到的統(tǒng)計(jì)數(shù)據(jù)可以看出,在數(shù)據(jù)量非常少的時(shí)候,三者效率幾乎沒什么差異,當(dāng)少于20個(gè)字符串連接時(shí),用「+」效率甚至更高,不過,隨著字符串的個(gè)數(shù)增多,「join」方法發(fā)揮出來效果了,而用「+」越來越慢。這點(diǎn)無論是 python2 還是 python3 基本上是一樣的。
python2.7.10
python3.6.0
所以結(jié)論是:如果連接的字符串很少,只有幾個(gè)或者十幾個(gè),完全可以通過「+」來連接,畢竟這種方式更直白,而超過一定個(gè)數(shù)之后,則應(yīng)該采用「join」方法,只有在操作大數(shù)據(jù)的時(shí)候,兩者的對(duì)比才明顯。
通過現(xiàn)象看本質(zhì)才能做到知其然并知其所以然。Cpython 編譯器內(nèi)部其實(shí)針對(duì)字符串做了非常多的優(yōu)化工作。在下篇文章準(zhǔn)備專門寫一寫字符串工作原理的文章,這里先買個(gè)瓜子,預(yù)知后事如何,請(qǐng)關(guān)注「Python之禪」
最后,做任何事我們都不能僅憑三言兩語就聽信于人,而應(yīng)該帶著質(zhì)疑的精神去探索這個(gè)世界。(有感于最近一程序員因求職被卷入傳銷組織遇難)
總結(jié)
以上是生活随笔為你收集整理的Python 中,字符串连接效率最高的方式是?一定出乎你的意料的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中5个json库的速度对比
- 下一篇: python字符串连接的三种方法及其效率