說說Python中連接字元串用join還是+?

  • 2019 年 11 月 27 日
  • 筆記

問:說說Python中連接字元串用join還是+?

答:兩者都可以用於 Python 連接字元串,我們先來個簡單的例子,看看兩者怎麼用法?

str1 = ":".join(["公眾號","程式IT圈"])  str2 = "公眾號:" + "程式IT圈"  print(str1) # 公眾號:程式IT圈  print(str2) # 公眾號:程式IT圈

上面程式碼,稍微說一下join函數的用法,join() 方法用於將序列中的元素以指定的字元連接生成一個新的字元串。

語法格式說明:

string.join(sequence)

string ==>> 字元串拼接符

sequence ==>> 要拼接的對象,可為字元串、元祖、列表、字典、集合

學會了兩者的基本用法,我們再來說說兩者運行效率性能的比較 。

因為電腦運行速度很快,所以如果很短的字元串連接,幾乎兩者沒什麼差別,所以我們做個實驗,連接一個很長的字元串,程式碼如下:

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(10000)]     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, + 運行時間: %f" % (time1, time2))       運行時間結果:     join運行時間: 0.063888, + 運行時間: 0.494203

從上面程式碼中,可以看出使用join要比+快很多,在大規格場景下的上萬次循環,join的優勢非常明顯 。

為什麼呢?由於Python中字元串是不可變對象,修改字元串就得將原字元串中的值複製,開闢一塊新的記憶體,加上修改的內容後寫入到新記憶體中,以達到「修改」字元串的效果。在使用「+」拼接字元串時,正是使用了重複性的複製、申請新記憶體、寫入值到新記憶體的工作一遍遍的將字元串的值修改。而使用join()方法拼接字元串時,會先計算總共需要申請多少記憶體,然後一次性申請所需記憶體並將字元串複製過去。這樣便省去了重複性的記憶體申請和寫入,節省了時間消耗。

Tags: