分析Python字符串拼接+=和join()哪個速度更快
字符串拼接的兩種方法
程序當(dāng)中經(jīng)常出現(xiàn)需要不斷接收新字符串并將這些字符串組成新字符串輸出的情況。
該方法一般有兩種解決方案:
- 創(chuàng)建一個空字符串(test_str),將每次新傳入的 new_str 使用 ‘test_str += new_str’ 的方式添加到原有字符串中,返回test_str
- 創(chuàng)建一個空列表(test_list),將每次新傳入的 new_str 使用 append(new_str) 的方式添加到列表當(dāng)中,返回=="".join(test_list)==
效率之間的比較
import time # 裝飾器,計算程序運行時間 def start_time(func): def wrapper(*args, **kwargs): start = time.time() res = func(*args, **kwargs) print(func.__name__, time.time() - start) return res return wrapper # 使用 append 和 join 實現(xiàn)連續(xù)字符串拼接 @start_time def test_1(frequency, string): s = [] for i in range(frequency): s.append(string) return ''.join(s) # 使用 += 實現(xiàn)連續(xù)字符串拼接 @start_time def test_2(frequency, string): s = '' for i in range(frequency): s += string return s name = 'P' for i in range(25): print('\n數(shù)據(jù)量為2的{}次方'.format(i)) f = 2 ** i test_1(f, name) test_2(f, name)
結(jié)論
注:具體測試結(jié)果會因硬件性能差別而有較大差異,趨勢不會變。
字符串長度在百萬以下:
兩種方式區(qū)別不大,join() 方法會快 25% 左右字符串長度在百萬以上:+=的方法所消耗的時間會指數(shù)級的增加,(百萬以下也指數(shù)級增加,只是不明顯),join() 方法會有明顯優(yōu)勢。
當(dāng)代碼當(dāng)中的 name 長度越長,+= 方法的弊端就越明顯。
分析
Python中字符串是不可變對象,修改字符串就得將原字符串中的值復(fù)制,開辟一塊新的內(nèi)存,加上修改的內(nèi)容后寫入到新內(nèi)存中,以達到“修改”字符串的效果。在使用“+”拼接字符串時,正是使用了重復(fù)性的復(fù)制、申請新內(nèi)存、寫入值到新內(nèi)存的工作一遍遍的將字符串的值修改。
而使用join()方法拼接字符串時,會先計算總共需要申請多少內(nèi)存,然后一次性申請所需內(nèi)存并將字符串復(fù)制過去。這樣便省去了重復(fù)性的內(nèi)存申請和寫入,節(jié)省了時間消耗。
最后
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
pycharm部署、配置anaconda環(huán)境的教程
PyCharm是一款很好用很流行的python編輯器。Anaconda是專注于數(shù)據(jù)分析的Python發(fā)行版本,包含了conda、Python等190多個科學(xué)包及其依賴項,這篇文章主要介紹了pycharm部署、配置anaconda環(huán)境的教程,需要的朋友可以參考下2020-03-03Python多線程采集二手房源數(shù)據(jù)信息流程詳解
這篇文章主要介紹了Python多線程采集二手房源數(shù)據(jù)信息流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-05-05tensorflow中tf.slice和tf.gather切片函數(shù)的使用
今天小編就為大家分享一篇tensorflow中tf.slice和tf.gather切片函數(shù)的使用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01numpy數(shù)組做圖片拼接的實現(xiàn)(concatenate、vstack、hstack)
這篇文章主要介紹了numpy數(shù)組做圖片拼接的實現(xiàn)(concatenate、vstack、hstack),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Python實戰(zhàn)之使用PyQt5構(gòu)建HTTP接口測試工具
在現(xiàn)代軟件開發(fā)中,測試接口的有效性與響應(yīng)情況變得尤為重要,本文將指導(dǎo)構(gòu)建一個簡單的HTTP接口測試工具,使用Python的PyQt5庫創(chuàng)建用戶界面,并通過requests庫發(fā)送 HTTP 請求,需要的可以參考下2024-11-11