面試python崗位,提問:鏈接字符串用join仍是+,怎麼回答?

Python學習

本篇要講的是,鏈接字符串的時候能夠用join也能夠用+,但這二者有沒有區別呢? 關注公衆號:「Python專欄」,後臺回覆「騰訊架構資源1」,獲取由騰訊架構師整理的大數據學習資源包全套!!!python

![Python專欄二維碼](https://img-blog.csdnimg.cn/20190228220401806.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIzNjU4Mjg=,size_4,color_FFFFFF,t_70#pic_center =200x200)數組

咱們先來看一下用join和+鏈接字符串的例子架構

str1 = " ".join(["hello", "world"])
str2 = "hello " + "world"

print(str1)  # 輸出 「hello world"
print(str2)  # 輸出 「hello world"

二者的結果是同樣,那麼考慮這樣一個問題,這二者在性能上有區別嗎? 咱們來作個實驗,比較下join和+的性能性能

import timeit

def test1(strlist):
    return "".join(strlist)

def test2(strlist):
    result = ""
    for v in strlist:
        result = result+v
    return result

if __name__ == "__main__":
    strlist = ["a very very very very very very very long string" for n in range(100000)]
    timer1 = timeit.Timer("test1(strlist)", "from __main__ import strlist, test1")
    timer2 = timeit.Timer("test2(strlist)", "from __main__ import strlist, test2")
    time1 = timer1.timeit(number=100)
    time2 = timer2.timeit(number=100)
    print("join: %f, plus: %f" % (time1, time2))

那麼這裏咱們不對timeit模塊作過多解釋,大家能夠理解爲是一個對代碼效率進行檢測運行耗時的模塊。下次咱們單獨起一篇來講這個timeit。學習

上面的程序有以下的輸出大數據

join: 0.116944, plus: 0.394379

能夠看到,join的性能明顯好於+。這是爲何呢?code

緣由是這樣的,字符串是不可變對象,當用操做符+鏈接字符串的時候,每執行一次+都會申請一塊新的內存,而後複製上一個+操做的結果和本次操做的右操做符到這塊內存空間,所以用+鏈接字符串的時候會涉及好幾回內存申請和複製。對象

而join在鏈接字符串的時候,會先計算須要多大的內存存放結果,而後一次性申請所需內存並將字符串複製過去,這是爲何join的性能優於+的緣由。blog

因此在鏈接字符串數組的時候,咱們應考慮優先使用join。內存

相關文章
相關標籤/搜索