上一篇文章我們分析了幾種常用的字符串拼接方式,從使用場合和時機對幾種方式進行了對比。今天,我們來對比一下這幾種方式的性能,以便大家在以後的應用中能迅速找到最優性能的字符串拼接方式。
首先,我們創建一個函數
該函數的作用是:隨機生成指定數目的字符串列表(字符串長度為5-8個字符)用於測試。
from random import choice, randint
from string import ascii_letters
def create_str(n):
# 字符列表
r_lst = []
for i in range(n):
# 生成n個字符串
tmp_str = ''
# 隨機生成5-8位的字符串
for j in range(randint(5, 8)):
tmp_str += choice(ascii_letters)
r_lst.append(tmp_str)
return r_lst
看下效果,比如生成20個隨機(5-8位)的字符串,我們直接使用create_str(20),即可獲取。
test_str = 'TVOgaNh'+'SsKEWLQM'+'KiacqJ'+'ipwoVhnc'+'EfiRNa'+'qGRgLs'+'RDLdFhn'+'IMyES'+'uDcMK'+'NuzDYQU'+'GOdrJ'+'LhyvA'+'aEgdF'+'kDDHv'+'hsKLZklO'+'KnXeDJNc'+'LvVeo'+'ExNDpCAJ'+'khuDHP'+'BjvuIuA'
其次,我們對測試方法進行分類
我們將前面討論的方法分為三類(分類方法參照了腳本之家中Python貓發表的一篇《Python拼接字符串的7種方法總結》的博文)
格式化類(%、format()函數)
拼接類(+、join()函數)
插值類(F-strings)
分別取其中一個進行比較看下性能。
格式化類:%和format()函數比較
前提:隨機生成1000、10000個字符串列表,使用for循環遍歷添加每一個字符串最終獲取拼接後的字符串。
從上圖可以看到,format()函數和%拼接字符串性能差異不大,選擇自己喜歡的就可以了,但是為了增加程序可讀性,建議使用format()函數進行拼接。
拼接類:+和join()函數比較
前提:隨機生成100000個字符串列表,通過各自方法(for循環和序列拼接)最終獲取拼接後的字符串。
從上圖可以看出,join()函數在數據量大時,性能明顯優於'+'符號拼接。這是因為'+'符號拼接每次拼接時都會開闢一塊新的內存空間。因此,在數據量較大時,字符換序列拼接建議直接使用join()函數。
插值類:F-strings分別比較拼接10000個和100000個字符串的效率
測試代碼如下所示。
我們與格式化類和拼接類分別進行比較,如下所示。
得出什麼結論?
字符串序列拼接,不論數據量大小,首選join()函數;
格式化類處理中,%和format()拼接差別不大,但是format()函數可讀性要好一點;
在數據量小於100000,字符串拼接中F-strings性能優於其它拼接方法(前提是Python版本必須大於3.6.2);
數據量少、對程序性能要求不高、程序猿用腦過度時,選用『+』拼接;
當涉及對字符串格式進行處理時,首選format()函數和F-strings方法。
好了,今天的內容就到這裡了,我們利用了兩篇內容對Python中字符串拼接進行了總結測試,分析了常用的方法,在這些方法中,大家參照結論的基礎上,選擇自己喜歡常用的方法。有時候,在程序實現初期對性能不要考慮太多,考慮太多有時候會影響程序開發。但是,所謂熟能生巧,接觸多了,在選擇數據結構或者對數據結構進行處理時,就會自然而然的選擇性能表現優秀的方式方法。建議多練習,平時多涉獵相關內容。「書到用時方恨少」,平時多練、多積累類似的知識點,對大家的編程學習也是很有益的。
喜歡的關注我,後續會推出更有意思的內容,大家有沒更好的字符串處理辦法呢?歡迎留言。
轉載請註明出處,百家號:Python高手養成