說說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()方法拼接字元串時,會先計算總共需要申請多少記憶體,然後一次性申請所需記憶體並將字元串複製過去。這樣便省去了重複性的記憶體申請和寫入,節省了時間消耗。

