分析Python字符串拼接+=和join()哪個速度更快
字符串拼接的兩種方法
程序當中經(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) 的方式添加到列表當中,返回=="".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)
結論
注:具體測試結果會因硬件性能差別而有較大差異,趨勢不會變。
字符串長度在百萬以下:
兩種方式區(qū)別不大,join() 方法會快 25% 左右字符串長度在百萬以上:+=的方法所消耗的時間會指數(shù)級的增加,(百萬以下也指數(shù)級增加,只是不明顯),join() 方法會有明顯優(yōu)勢。
當代碼當中的 name 長度越長,+= 方法的弊端就越明顯。
分析
Python中字符串是不可變對象,修改字符串就得將原字符串中的值復制,開辟一塊新的內存,加上修改的內容后寫入到新內存中,以達到“修改”字符串的效果。在使用“+”拼接字符串時,正是使用了重復性的復制、申請新內存、寫入值到新內存的工作一遍遍的將字符串的值修改。
而使用join()方法拼接字符串時,會先計算總共需要申請多少內存,然后一次性申請所需內存并將字符串復制過去。這樣便省去了重復性的內存申請和寫入,節(jié)省了時間消耗。
最后
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
pyqt5讓圖片自適應QLabel大小上以及移除已顯示的圖片方法
今天小編就為大家分享一篇pyqt5讓圖片自適應QLabel大小上以及移除已顯示的圖片方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python解決“argument?after?*?must?be?an?iterable”報錯問題
這篇文章主要介紹了Python解決“argument?after?*?must?be?an?iterable”報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Python?PyQt5中窗口數(shù)據(jù)傳遞的示例詳解
開發(fā)應用程序時,若只有一個窗口則只需關心這個窗口里面的各控件之間如何傳遞數(shù)據(jù)。如果程序有多個窗口,就要關心不同的窗口之間是如何傳遞數(shù)據(jù)。本文介紹了PyQt5中三種窗口數(shù)據(jù)傳遞,需要的可以了解一下2022-12-12
python讀取.mat文件的數(shù)據(jù)及實例代碼
這篇文章主要介紹了python讀取.mat文件的數(shù)據(jù)的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-07-07
Python通過PIL獲取圖片主要顏色并和顏色庫進行對比的方法
這篇文章主要介紹了Python通過PIL獲取圖片主要顏色并和顏色庫進行對比的方法,實例分析了Python通過PIL模塊操作圖片的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
python2與python3中關于對NaN類型數(shù)據(jù)的判斷和轉換方法
今天小編就為大家分享一篇python2與python3中關于對NaN類型數(shù)據(jù)的判斷和轉換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
pytorch快速搭建神經(jīng)網(wǎng)絡_Sequential操作
這篇文章主要介紹了pytorch快速搭建神經(jīng)網(wǎng)絡_Sequential操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06

